1 Assignment

Short objective

The objective of this report is to analyze the incidence rates of Guillain-Barré Syndrom (gbs) and anaphylactic shock using the PHARMO database, and to present the results in a clear and concise manner.

Methods

PHARMO

The data for this analysis was obtained from the PHARMO database, which is a research institute in the Netherlands that maintains a database of electronic medical records. The Pharmo Data Network is a population-based network of healthcare databases and combines data from different healthcare settings in the Netherlands. These different data sources are linked on a patient level through validated algorithms.

Study population

For this research particularly, individuals who were in the study between 01/01/2017 and 31/12/2020 are included. In addition, the study’s inclusion and exclusion criteria consist of three requirements. The first requirement is that individuals must have at least one year of follow-up before the study’s start date. The second requirement is that individuals must have at least one day of follow-up after the study’s start date. Lastly, the study will not consider repeated events, and individuals will be censored at the first occurrence of an event. After fulfilling the aforementioned requirements, we have a study population of N = 675

Data Preperation

Prior to the analysis, various tables are prepared and then combined in order to obtain the incidence rates. First the OBSERVATION_PERIOD table was loaded and individuals who are not in the above mentioned study population, will be removed.

After doing this, the PERSONS table was loaded. In this table, an age variable is made with the birth data variable. The age was created with the start of the study period as reference. with this age variable, the following age bands are created: 0-19, 20-39, 40-59, 60-79. The age band 80+ is not created, because the there are no individuals who are older than 67.

The next step in the date preparation, was merging the OBSERVATION_PERIODS and PERSON table. We only kept the individuals who are in the OBSERVATION_PERIODS table.

When the aforementioned tables are merged, Concept sets were created. These sets were created from diagnostic codes from the codesheet. All diagnostic codes and vocabulary of the events used to make incidence rates can be found in Table 1.1

When the aforementioned tables are merged, Concept sets were created. These sets were created from diagnostic codes from the codesheet. All diagnostic codes and vocabulary of the events we will make incidence rates of can be found in Table 1.1.

Figure 1.1: A table

Lastly, the EVENTS table is loaded, and merged with the event codes. If the persons had an event before the start of the study, they are removed from the dataset. If a person has more than one event, the second event is removed.

Analyis

For the analysis, incidence rates per 1000 person years for the study population are created per event (i.e. Anaphylactic Shock Narrow, Anaphylactic shock broad, and gbs). The formula for the incidence rates can be found below:

\[ \text{Incidence Rates overall} = \frac{Total \ number \ of \ events}{Total \ person-years} * 1000 \]

Afterwards, the incidence rates are stratified by year and age-bands. The formulas for these can be found below: \[ \text{Incidence rates by year} = \frac{total \ number \ of \ events \ for \ each \ year} { person-years \ for \ each \ year} * 1000 \]

\[ \text{Incidence rates by year by age bands} = \frac{Total \ number \ of \ events for \ each \ year \ per \ age \ band}{person-years \ for \ each \ year \ per \ age \ band} * 1000 \]

To assess the technical validation, confidence intervals are used. Exact Poisson confidence limits for the estimated rate are found as the Poisson means, for distributions with the observed number of events and probabilities relevant to the chosen confidence level, divided by time at risk. The relationship between the Poisson and chi-square distributions is employed here (Ulm, 1990):

\[Y_l = \frac{\chi^2_{2Y , a/2}}{2}\] \[Y_u=\frac{\chi^2_2(Y+1), 1-a/2}{2}\]

where Y is the observed number of events, \(Y_l\) and \(Y_u\) are lower and upper confidence limits for Y respectively, \(\chi^2_{v,a}\) is the chi-square quantile for upper tail probability on ν degrees of freedom.

Results

The forest plot figures (see Figure 1.2), show the incidence rates. A total of 86 events occurred. Of these events 28 were anaphylaxis narrow, 22 were anaphylaxis possible and 36 were GBS. When stratified in to age bands, the person years become lower and there is low confidence. Especially in the high and low age bands. Most events occurred in the first three years. In these years each type of event status had around 15 to 20 occurred events. The last year of the study has almost no events and an insignificant incidence rate confidence interval.

Forest Plot Figures

Total

Forest plots of total IR

Figure 1.2: Forest plots of total IR

2017

forest plots data from 2017

Figure 1.3: forest plots data from 2017

2018

Forest Plot data from 2018

Figure 1.4: Forest Plot data from 2018

2019

Forest Plot data from 2019

Figure 1.5: Forest Plot data from 2019

2020

Forest plot data from 2020

Figure 1.6: Forest plot data from 2020

Lessons learned

We have learned to take data from various tables, and structure it to a dataset which can be analysed. In addition, we have learned that a lot of data is needed to make inference about incidence rates. That is, when data needs to be stratified, the confidence will get lower when there are not enough person years. Hence, Common Data Models are used, to improve the data quality.

Annexes

Annex 1 Results Table

Annex 2 Day 6

LS0tDQp0aXRsZTogIkluY2lkZW5jZSINCmF1dGhvcjogIk1hcnRpam4gS29zdGVyLCBKdXJyaWFuIHZhbiBkZSBLcmFhdHMsIFRpbSBQb29ydGh1aXMiDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6DQogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoNCiAgICB0b2M6IHRydWUNCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgdGhlbWU6IHBhcGVyDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIGNvbW1lbnQgPSBOQSwgd2FybmluZyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGVycm9yPUZBTFNFLCByZXN1bHRzPSdoaWRlJyxmaWcua2VlcD0nYWxsJykNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCg0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoZGF0YS50YWJsZSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGVwaVIpDQpgYGANCg0KIyBBc3NpZ25tZW50DQoNCg0KYGBge3J9DQoNCiMgbG9hZCB0aGUgdGFibGVzDQpPX1AgPC0gcmVhZC5jc3YoIlRhYmxlcy9PQlNFUlZBVElPTl9QRVJJT0RTLmNzdiIpDQpldmVudHMgPC0gcmVhZC5jc3YoJ1RhYmxlcy9FVkVOVFMuY3N2JykNCnBlcnNvbnMgPC0gcmVhZC5jc3YoJ1RhYmxlcy9QRVJTT05TLmNzdicpDQppbnN0YW5jZSA8LSByZWFkLmNzdignVGFibGVzL0lOU1RBTkNFLmNzdicpDQpjb2RlbGlzdCA8LSByZWFkX2V4Y2VsKCJUYWJsZXMvQ29kZUxpc3RfMjAyMTAxMjgoMSkueGxzeCIsIA0KICAgIHNoZWV0ID0gIkFOQVBIWUwiKQ0KY29kZWxpc3QyIDwtIHJlYWRfZXhjZWwoIlRhYmxlcy9Db2RlTGlzdF8yMDIxMDEyOCgxKS54bHN4IiwgDQogICAgc2hlZXQgPSAiR0JTIikNCmBgYA0KDQoNCiMjIFNob3J0IG9iamVjdGl2ZSB7LSNzaG9ydH0NCg0KVGhlIG9iamVjdGl2ZSBvZiB0aGlzIHJlcG9ydCBpcyB0byBhbmFseXplIHRoZSBpbmNpZGVuY2UgcmF0ZXMgb2YgR3VpbGxhaW4tQmFycsOpIFN5bmRyb20gKGdicykgYW5kIGFuYXBoeWxhY3RpYyBzaG9jayB1c2luZyB0aGUgUEhBUk1PIGRhdGFiYXNlLCBhbmQgdG8gcHJlc2VudCB0aGUgcmVzdWx0cyBpbiBhIGNsZWFyIGFuZCBjb25jaXNlIG1hbm5lci4NCg0KIyMgTWV0aG9kcyB7LSNtZXRofQ0KDQojIyMgUEhBUk1PIHstI3BoYXJ9DQoNClRoZSBkYXRhIGZvciB0aGlzIGFuYWx5c2lzIHdhcyBvYnRhaW5lZCBmcm9tIHRoZSBQSEFSTU8gZGF0YWJhc2UsIHdoaWNoIGlzIGEgcmVzZWFyY2ggaW5zdGl0dXRlIGluIHRoZSBOZXRoZXJsYW5kcyB0aGF0IG1haW50YWlucyBhIGRhdGFiYXNlIG9mIGVsZWN0cm9uaWMgbWVkaWNhbCByZWNvcmRzLiBUaGUgUGhhcm1vIERhdGEgTmV0d29yayBpcyBhIHBvcHVsYXRpb24tYmFzZWQgbmV0d29yayBvZiBoZWFsdGhjYXJlIGRhdGFiYXNlcyBhbmQgY29tYmluZXMgZGF0YSBmcm9tIGRpZmZlcmVudCBoZWFsdGhjYXJlIHNldHRpbmdzIGluIHRoZSBOZXRoZXJsYW5kcy4gVGhlc2UgZGlmZmVyZW50IGRhdGEgc291cmNlcyBhcmUgbGlua2VkIG9uIGEgcGF0aWVudCBsZXZlbCB0aHJvdWdoIHZhbGlkYXRlZCBhbGdvcml0aG1zLg0KDQoNCg0KYGBge3J9DQoNCg0KZGZwMSA8LSBPX1AgJT4lIA0KICBmaWx0ZXIob3Bfc3RhcnRfZGF0ZSA8PSAyMDE2MDEwMSwgIyBSZW1vdmUgaW5kaXZpZHVhbHMgdGhhdCBkbyBub3QgaGF2ZSBhdCBsZWFzdCAxIHllYXIgb2YgRlUgYmVmb3JlIHN0YXJ0IG9mIHN0dWR5DQogICAgICAgICBvcF9lbmRfZGF0ZSA+PSAyMDE3MDEwMikgIyBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kaXZpZHVhbHMgYXQgbGVhc3QgaGF2ZSAxIGRheSBvZiBmdSBkdXJpbmcgc3R1ZHkgcGVyaW9kIA0KZGZwMSRzdGFydF9zdHVkeSA8LSAyMDE3MDEwMQ0KYGBgDQoNCmBgYHtyfQ0KIyBNYWtlIHN1cmUgdGhhdCBhbGwgZGF0ZXMgYXJlIGluIERhdGUgZm9ybWF0IFlZWVktTU0tREQNCmRmcDEgPC0gZGZwMSAlPiUgDQogIG11dGF0ZShvcF9zdGFydF9kYXRlID0gYXMuRGF0ZSh5bWQob3Bfc3RhcnRfZGF0ZSkpLA0KICAgICAgICAgb3BfZW5kX2RhdGUgPSBhcy5EYXRlKHltZChvcF9lbmRfZGF0ZSkpLA0KICAgICAgICAgc3RhcnRfc3R1ZHkgPSBhcy5EYXRlKHltZChzdGFydF9zdHVkeSkpKQ0KYGBgDQoNCmBgYHtyfQ0KcGVyc29ucyA8LSBwZXJzb25zICU+JSANCiAgbXV0YXRlKGJpcnRoZGF0ZSA9IGFzLkRhdGUoeW1kKHllYXJfb2ZfYmlydGgqMTAwMDArbW9udGhfb2ZfYmlydGgqMTAwK2RheV9vZl9iaXJ0aCkpLCAjIGNhbGN1bGF0ZSB0aGUgYmlydGggZGF0ZQ0KICAgICAgICAgYWdlID0gYXMubnVtZXJpYyhkaWZmdGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoYXMuRGF0ZSh5bWQoMjAxNzAxMDEpKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlydGhkYXRlLCB1bml0cz0nZGF5cycpKSAvIDM2NS4yNSwgIyBjYWxjdWxhdGUgdGhlIGFnZSANCiAgICAgICAgIGFnZV9iYW5kcyA9IGN1dChhZ2UsIGJyZWFrcyA9IGMoMCwxOSwzOSw1OSw3OSxJbmYpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLmxvd2VzdCA9IFQsaW5jbHVkZS5oaWdoZXN0ID0gVCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiWzAsMTldIiwnWzIwLDM5XScsICdbNDAsNTldJywgJ1s2MCw3OV0nLCAnWzgwK10nKSkgIyBNYWtlIHN1cmUgdGhlIGFnZXMgYXJlIGRpdmlkZWQgaW4gYWdlIGJhbmRzIA0KICAgICAgICAgICAgICAgICAgICAgICAgICkgJT4lIA0KICBmaWx0ZXIoYWdlID49IDApDQpgYGANCg0KDQoNCiMjIyBTdHVkeSBwb3B1bGF0aW9uIHstI3N0dXBvcH0NCg0KRm9yIHRoaXMgcmVzZWFyY2ggcGFydGljdWxhcmx5LCBpbmRpdmlkdWFscyB3aG8gd2VyZSBpbiB0aGUgc3R1ZHkgYmV0d2VlbiAwMS8wMS8yMDE3IGFuZCAzMS8xMi8yMDIwIGFyZSBpbmNsdWRlZC4gSW4gYWRkaXRpb24sIHRoZSBzdHVkeSdzIGluY2x1c2lvbiBhbmQgZXhjbHVzaW9uIGNyaXRlcmlhIGNvbnNpc3Qgb2YgdGhyZWUgcmVxdWlyZW1lbnRzLiBUaGUgZmlyc3QgcmVxdWlyZW1lbnQgaXMgdGhhdCBpbmRpdmlkdWFscyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHllYXIgb2YgZm9sbG93LXVwIGJlZm9yZSB0aGUgc3R1ZHkncyBzdGFydCBkYXRlLiBUaGUgc2Vjb25kIHJlcXVpcmVtZW50IGlzIHRoYXQgaW5kaXZpZHVhbHMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBkYXkgb2YgZm9sbG93LXVwIGFmdGVyIHRoZSBzdHVkeSdzIHN0YXJ0IGRhdGUuIExhc3RseSwgdGhlIHN0dWR5IHdpbGwgbm90IGNvbnNpZGVyIHJlcGVhdGVkIGV2ZW50cywgYW5kIGluZGl2aWR1YWxzIHdpbGwgYmUgY2Vuc29yZWQgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gZXZlbnQuIEFmdGVyIGZ1bGZpbGxpbmcgdGhlIGFmb3JlbWVudGlvbmVkIHJlcXVpcmVtZW50cywgd2UgaGF2ZSBhIHN0dWR5IHBvcHVsYXRpb24gb2YgX05fID0gYHIgbnJvdyhkZnAxKWANCg0KIyMjIERhdGEgUHJlcGVyYXRpb24gey0jZGF0cHJlcH0NCg0KUHJpb3IgdG8gdGhlIGFuYWx5c2lzLCB2YXJpb3VzIHRhYmxlcyBhcmUgcHJlcGFyZWQgYW5kIHRoZW4gY29tYmluZWQgaW4gb3JkZXIgdG8gb2J0YWluIHRoZSBpbmNpZGVuY2UgcmF0ZXMuIEZpcnN0IHRoZSBPQlNFUlZBVElPTl9QRVJJT0QgdGFibGUgd2FzIGxvYWRlZCBhbmQgaW5kaXZpZHVhbHMgd2hvIGFyZSBub3QgaW4gdGhlIGFib3ZlIG1lbnRpb25lZCBzdHVkeSBwb3B1bGF0aW9uLCB3aWxsIGJlIHJlbW92ZWQuIA0KDQpBZnRlciBkb2luZyB0aGlzLCB0aGUgUEVSU09OUyB0YWJsZSB3YXMgbG9hZGVkLiBJbiB0aGlzIHRhYmxlLCBhbiBhZ2UgdmFyaWFibGUgaXMgbWFkZSB3aXRoIHRoZSBiaXJ0aCBkYXRhIHZhcmlhYmxlLiBUaGUgYWdlIHdhcyBjcmVhdGVkIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBzdHVkeSBwZXJpb2QgYXMgcmVmZXJlbmNlLiB3aXRoIHRoaXMgYWdlIHZhcmlhYmxlLCB0aGUgZm9sbG93aW5nIGFnZSBiYW5kcyBhcmUgY3JlYXRlZDogMC0xOSwgMjAtMzksIDQwLTU5LCA2MC03OS4gVGhlIGFnZSBiYW5kIDgwKyBpcyBub3QgY3JlYXRlZCwgYmVjYXVzZSB0aGUgdGhlcmUgYXJlIG5vIGluZGl2aWR1YWxzIHdobyBhcmUgb2xkZXIgdGhhbiBgciByb3VuZChtYXgocGVyc29ucyRhZ2UpKWAuICANCg0KVGhlIG5leHQgc3RlcCBpbiB0aGUgZGF0ZSBwcmVwYXJhdGlvbiwgd2FzIG1lcmdpbmcgdGhlIE9CU0VSVkFUSU9OX1BFUklPRFMgYW5kIFBFUlNPTiB0YWJsZS4gV2Ugb25seSBrZXB0IHRoZSBpbmRpdmlkdWFscyB3aG8gYXJlIGluIHRoZSBPQlNFUlZBVElPTl9QRVJJT0RTIHRhYmxlLiANCg0KDQpXaGVuIHRoZSBhZm9yZW1lbnRpb25lZCB0YWJsZXMgYXJlIG1lcmdlZCwgQ29uY2VwdCBzZXRzIHdlcmUgY3JlYXRlZC4gVGhlc2Ugc2V0cyB3ZXJlIGNyZWF0ZWQgZnJvbSBkaWFnbm9zdGljIGNvZGVzIGZyb20gdGhlIGNvZGVzaGVldC4gQWxsIGRpYWdub3N0aWMgY29kZXMgYW5kIHZvY2FidWxhcnkgb2YgdGhlIGV2ZW50cyB1c2VkIHRvIG1ha2UgaW5jaWRlbmNlIHJhdGVzIGNhbiBiZSBmb3VuZCBpbiBUYWJsZSBcQHJlZihmaWc6Y29kZXMpDQoNCldoZW4gdGhlIGFmb3JlbWVudGlvbmVkIHRhYmxlcyBhcmUgbWVyZ2VkLCBDb25jZXB0IHNldHMgd2VyZSBjcmVhdGVkLiBUaGVzZSBzZXRzIHdlcmUgY3JlYXRlZCBmcm9tIGRpYWdub3N0aWMgY29kZXMgZnJvbSB0aGUgY29kZXNoZWV0LiBBbGwgZGlhZ25vc3RpYyBjb2RlcyBhbmQgdm9jYWJ1bGFyeSBvZiB0aGUgZXZlbnRzIHdlIHdpbGwgbWFrZSBpbmNpZGVuY2UgcmF0ZXMgb2YgY2FuIGJlIGZvdW5kIGluIFRhYmxlIFxAcmVmKGZpZzpjb2RlcykuDQoNCg0KDQoNCmBgYHtyIGNvZGVzLCByZXN1bHRzPSdhc2lzJywgZmlnLmNhcCA9ICdBIHRhYmxlJ30NCmFuYXBoeWwgPC0gY29kZWxpc3QgJT4lIA0KICBmaWx0ZXIoYENvZGluZyBzeXN0ZW1gPT0gYygnSUNEOScsICdJQ0QxMC9DTScpKQ0KDQpnYnMgPC0gY29kZWxpc3QyICU+JSANCiAgZmlsdGVyKGBDb2Rpbmcgc3lzdGVtYD09IGMoJ0lDRDknLCAnSUNEMTAvQ00nKSkNCg0KY29kZXMgPC0gZGF0YS50YWJsZShEaWFnbm9zaXMgPSBwYXN0ZTAoJ2FuYXBoeWxfJyxhbmFwaHlsJEFsZ29yaXRobSxzZXAgPSAiIiksIA0KICAgICAgICAgICAgICAgIGV2ZW50X2NvZGUgPSBhbmFwaHlsJENvZGUsIA0KICAgICAgICAgICAgICAgIFZvY2FidWxhcnkgPSBhbmFwaHlsJGBDb2Rpbmcgc3lzdGVtYCkNCg0KZ2JzdGVtcCA8LSBkYXRhLnRhYmxlKERpYWdub3NpcyA9IHBhc3RlMCgnZ2JzXycsZ2JzJEFsZ29yaXRobSxzZXAgPSAiIiksIA0KICAgICAgICAgICAgICAgIGV2ZW50X2NvZGUgPSBnYnMkQ29kZSwgDQogICAgICAgICAgICAgICAgVm9jYWJ1bGFyeSA9IGdicyRgQ29kaW5nIHN5c3RlbWApDQoNCmNvZGVzIDwtIHJiaW5kKGNvZGVzLCBnYnN0ZW1wKQ0KDQpkYXRhdGFibGUoY29kZXMsIA0KICAgICAgICAgIGNhcHRpb249J0RpYWdub3N0aWMgY29kZXMgcmV0cmlldmVkIGZyb20gdGhlIENvZGVMaXN0XzIwMjEwMTI4IEFOQVBIWUwgYW5kIEdCUyBzaGVldHMgJywNCiAgICAgICAgICBjbGFzcz0nY29tcGFjdCcsIA0KICAgICAgICAgIHJvd25hbWVzPUYsIA0KICAgICAgICAgIGNvbG5hbWVzPWMoJ0RpYWdub3NpcycsICdFdmVudCBDb2RlJywgJ1ZvY2FidWxhcnknKSwNCiAgICAgICAgICBleHRlbnNpb25zPSdCdXR0b25zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJw0KICAgICAgICAgICAgICAgICAgICAgICAgICwgYnV0dG9ucyA9IGMoJ2NvcHknLCAnY3N2JywgJ2V4Y2VsJywgJ3BkZicsICdwcmludCcpDQogICAgICAgICAgKSkjIyBEZXplIG9wIGxhdGVyIG1vbWVudCBub2cgd2F0IG1vb2llciBtYWtlbiANCg0KYGBgDQoNCg0KDQpMYXN0bHksIHRoZSBFVkVOVFMgdGFibGUgaXMgbG9hZGVkLCBhbmQgbWVyZ2VkIHdpdGggdGhlIGV2ZW50IGNvZGVzLiBJZiB0aGUgcGVyc29ucyBoYWQgYW4gZXZlbnQgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc3R1ZHksIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGF0YXNldC4gSWYgYSBwZXJzb24gaGFzIG1vcmUgdGhhbiBvbmUgZXZlbnQsIHRoZSBzZWNvbmQgZXZlbnQgaXMgcmVtb3ZlZC4gDQoNCiMjIyBBbmFseWlzIHstI2FuYWx9DQoNCg0KRm9yIHRoZSBhbmFseXNpcywgaW5jaWRlbmNlIHJhdGVzIHBlciAxMDAwIHBlcnNvbiB5ZWFycyBmb3IgdGhlIHN0dWR5IHBvcHVsYXRpb24gYXJlIGNyZWF0ZWQgcGVyIGV2ZW50IChpLmUuIEFuYXBoeWxhY3RpYyBTaG9jayBOYXJyb3csIEFuYXBoeWxhY3RpYyBzaG9jayBicm9hZCwgYW5kIGdicykuIFRoZSBmb3JtdWxhIGZvciB0aGUgaW5jaWRlbmNlIHJhdGVzIGNhbiBiZSBmb3VuZCBiZWxvdzoNCg0KDQpcWw0KXHRleHR7SW5jaWRlbmNlIFJhdGVzIG92ZXJhbGx9ID0gXGZyYWN7VG90YWwgXCBudW1iZXIgXCBvZiBcIGV2ZW50c317VG90YWwgXCBwZXJzb24teWVhcnN9ICogMTAwMCANClxdDQoNCkFmdGVyd2FyZHMsIHRoZSBpbmNpZGVuY2UgcmF0ZXMgYXJlIHN0cmF0aWZpZWQgYnkgeWVhciBhbmQgYWdlLWJhbmRzLiBUaGUgZm9ybXVsYXMgZm9yIHRoZXNlIGNhbiBiZSBmb3VuZCBiZWxvdzogDQpcWw0KICBcdGV4dHtJbmNpZGVuY2UgcmF0ZXMgYnkgeWVhcn0gPSBcZnJhY3t0b3RhbCBcICBudW1iZXIgXCBvZiBcIGV2ZW50cyBcIGZvciBcIGVhY2ggXCB5ZWFyfSB7IHBlcnNvbi15ZWFycyBcIGZvciBcIGVhY2ggXCB5ZWFyfSAqIDEwMDANClxdDQoNClxbDQogIFx0ZXh0e0luY2lkZW5jZSByYXRlcyBieSB5ZWFyIGJ5IGFnZSBiYW5kc30gPSBcZnJhY3tUb3RhbCBcIG51bWJlciBcIG9mIFwgZXZlbnRzIGZvciBcIGVhY2ggXCB5ZWFyIFwgIHBlciBcICBhZ2UgXCBiYW5kfXtwZXJzb24teWVhcnMgXCBmb3IgXCBlYWNoIFwgeWVhciBcICBwZXIgXCBhZ2UgXCBiYW5kfSAqIDEwMDANClxdDQoNClRvIGFzc2VzcyB0aGUgdGVjaG5pY2FsIHZhbGlkYXRpb24sIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGFyZSB1c2VkLiBFeGFjdCBQb2lzc29uIGNvbmZpZGVuY2UgbGltaXRzIGZvciB0aGUgZXN0aW1hdGVkIHJhdGUgYXJlIGZvdW5kIGFzIHRoZSBQb2lzc29uIG1lYW5zLCBmb3IgZGlzdHJpYnV0aW9ucyB3aXRoIHRoZSBvYnNlcnZlZCBudW1iZXIgb2YgZXZlbnRzIGFuZCBwcm9iYWJpbGl0aWVzIHJlbGV2YW50IHRvIHRoZSBjaG9zZW4gY29uZmlkZW5jZSBsZXZlbCwgZGl2aWRlZCBieSB0aW1lIGF0IHJpc2suIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgUG9pc3NvbiBhbmQgY2hpLXNxdWFyZSBkaXN0cmlidXRpb25zIGlzIGVtcGxveWVkIGhlcmUgKFVsbSwgMTk5MCk6DQoNCiQkWV9sID0gXGZyYWN7XGNoaV4yX3syWSAsIGEvMn19ezJ9JCQNCiQkWV91PVxmcmFje1xjaGleMl8yKFkrMSksIDEtYS8yfXsyfSQkDQoNCndoZXJlIFkgaXMgdGhlIG9ic2VydmVkIG51bWJlciBvZiBldmVudHMsICRZX2wkIGFuZCAkWV91JCBhcmUgbG93ZXIgYW5kIHVwcGVyIGNvbmZpZGVuY2UgbGltaXRzIGZvciBZIHJlc3BlY3RpdmVseSwgJFxjaGleMl97dixhfSQgaXMgdGhlIGNoaS1zcXVhcmUgcXVhbnRpbGUgZm9yIHVwcGVyIHRhaWwgcHJvYmFiaWxpdHkgb24gzr0gZGVncmVlcyBvZiBmcmVlZG9tLg0KDQoNCg0KDQoNCiMjIFJlc3VsdHMgey0jcmVzfQ0KDQpgYGB7cn0NCmRhdGEgPC0gbGVmdF9qb2luKGRmcDEsIHBlcnNvbnMsIGJ5ID0gInBlcnNvbl9pZCIpICMgbWVyZ2UgdGhlIE9CU0VSVkFUSU9OX1BFUklPRFMgYW5kIFBFUlNPTlMgdGFibGUgKGtlZXAgb25seSBpbmRpdmlkdWFscyB3aG8gYXJlIGluIE9CU0VSVkFUSU9OU19QRVJJT0RTIHRhYmxlKQ0KYGBgDQoNCg0KDQoNCmBgYHtyfQ0KZGZwMiA8LSBtZXJnZShjb2RlcywgZXZlbnRzLCBieSA9ICdldmVudF9jb2RlJykNCmRmcDIgPC0gZGZwMiAlPiUgDQogIGZpbHRlcihzdGFydF9kYXRlX3JlY29yZCA+IDIwMTcwMTAxLA0KICAgICAgICAgc3RhcnRfZGF0ZV9yZWNvcmQgPCAyMDIxMDEwMSkgJT4lIA0KICBhcnJhbmdlKHN0YXJ0X2RhdGVfcmVjb3JkKQ0KDQpkZnAyIDwtIGRmcDJbIWR1cGxpY2F0ZWQoZGZwMiRwZXJzb25faWQpXQ0KZGZwMiRlbmRfZGF0ZV9yZWNvcmQgPC0gZGZwMiRzdGFydF9kYXRlX3JlY29yZA0KZGZwMiRpc19ldmVudCA8LSAxDQoNCmBgYA0KDQpgYGB7cn0NCmRmdG90YWwgPC0gbGVmdF9qb2luKGRhdGEsZGZwMiwgYnkgPSAncGVyc29uX2lkJykNCmRmdG90YWwkaXNfZXZlbnRbaXMubmEoZGZ0b3RhbCRpc19ldmVudCldIDwtIDANCmBgYA0KDQpgYGB7cn0NCiMgZWluZGUgdmFuIGRlIHN0dWRpZSBwZXJpb2RlIG9wIGhldCBtb21lbnQgZGF0IGVyIGVlbiBldmVudCBpcyBiaWogZWVuIG9ic2VydmF0aWUNCmRmdG90YWwkZW5kX2luY2lkZW5jZSA8LSBhcy5EYXRlKHltZChkZnRvdGFsJGVuZF9kYXRlX3JlY29yZCkpDQojIFdoZW4gb2JzZXJ2YXRpb24gZG9lcyBub3QgaGF2ZSBhbiBldmVudCwgbWFrZSBzdXJlIGVuZF9pbmNpZGVuY2UgaXMgY29kZWQgYXMgZW5kIHN0dWR5IHBlcmlvZCAoMjAyMS0wMS0wMSkNCmRmdG90YWwkZW5kX2luY2lkZW5jZVtpcy5uYShkZnRvdGFsJGVuZF9pbmNpZGVuY2UpXSA8LSBhcy5EYXRlKHltZCgyMDIxMDEwMSkpIA0KI0NhbGN1bGF0ZSBob3cgbWFueSB5ZWFycyBlYWNoIG9ic2VydmFpdG9uIHdhcyBpbiB0aGUgc3R1ZHkuIA0KZGZ0b3RhbCR5ZWFyc19pbl9zdHVkeSA8LSBhcy5udW1lcmljKGRpZmZ0aW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgIChkZnRvdGFsJGVuZF9pbmNpZGVuY2UsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmdG90YWwkc3RhcnRfc3R1ZHksIHVuaXRzPSdkYXlzJykpIC8gMzY1LjI1DQoNCmBgYA0KDQoNCmBgYHtyfQ0KI21ha2luZyBJUiB3aXRoIDk1JSBDSSANCklSXzk1X0NJIDwtIGZ1bmN0aW9uKGV2ZW50cywgcHksIE4pew0KICB0bXAgPC0gYXMubWF0cml4KGNiaW5kKGV2ZW50cywgcHkpKQ0KICBjb25mX2ludHMgPC0gcm91bmQoZXBpLmNvbmYodG1wLCBjdHlwZSA9ICJpbmMucmF0ZSIsIG1ldGhvZCA9ICJleGFjdCIsIE4gPSBOLCBkZXNpZ24gPSAxLCANCiAgIGNvbmYubGV2ZWwgPSAwLjk1KSAqIDEwMDAsIDIpDQogIHJldHVybihjb25mX2ludHMpDQp9DQpgYGANCg0KPCEtLSBVbG0gSyAoMTk5MCkuIEEgc2ltcGxlIG1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgb2YgYSBzdGFuZGFyZGl6ZWQgbW9ydGFsaXR5IHJhdGlvLiBBbWVyaWNhbiBKb3VybmFsIG9mIEVwaWRlbWlvbG9neSAxMzE6IDM3MyAtIDM3NSAtLT4NCg0KDQoNCmBgYHtyfQ0KI3RvdGFsIFBZIGluIHN0dWR5IHBlcmlvZA0KVFBZIDwtIHN1bShkZnRvdGFsJHllYXJzX2luX3N0dWR5KQ0KDQojY2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgYW5hcGggc2hvY2tzIFBvc3NpYmxlIGluIHN0dWR5IHBlcmlvZCANClRORV9hbmFwaFAgPC0gZGZ0b3RhbCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfcG9zc2libGUnKSAlPiUgbnJvdygpDQoNCiMgSW5jaWRlbmNlIFJhdGUgZm9yIGFuYXBoIHNob2NrIHBvc3NpYmxlIGluIHN0dWR5IHBlcmlvZCANCg0KDQppcm9fYW5hcGhQIDwtICBJUl85NV9DSShUTkVfYW5hcGhQLCBUUFksIG5yb3coZGF0YSkpDQoNCg0KI2NhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGFuYXBoIHNob2NrcyBuYXJyb3cgaW4gc3R1ZHkgcGVyaW9kIA0KVE5FX2FuYXBoTiA8LSBkZnRvdGFsICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiMgSVIgZm9yIGFuYXBoIHNob2NrIG5hcnJvdyBpbiBzdHVkeSBwZXJpb2QNCmlyb19hbmFwaE4gPC0gSVJfOTVfQ0koVE5FX2FuYXBoTiwgVFBZLCBucm93KGRhdGEpKQ0KDQojIGFtb3VudCBvZiBnYnMgY2FzZXMgaW4gc3R1ZHkgcGVyaW9kDQpUTkVfZ2JzIDwtIGRmdG90YWwgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIElSIGZvciBnYnMgaW4gc3R1ZHkgcGVyaW9kDQppcm9fZ2JzIDwtIElSXzk1X0NJKFRORV9nYnMsIFRQWSwgbnJvdyhkYXRhKSkNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCiMgQWRkIGZvciBldmVyeSBvYnNlcnZhdGlvbnMgd2l0aCBhbiBldmVudCB0aGUgZGF0ZSBvZiB0aGUgZXZlbnQgaW4gdGhlIGRhdGFzZXQuIA0KZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcgPC0gYXMuRGF0ZSh5bWQoZGZ0b3RhbCRlbmRfZGF0ZV9yZWNvcmQpKSANCiMgZm9yIGV2ZXJ5IG9ic2VydnRpb24gd2hvIGRvZXMgbm90IGhhdmUgYW4gZXZlbnQsIG1ha2Ugc3VyZSB0aGVzZSB3aWxsIGdldCB0aGUgc3RhcnQgb2YgMjAxOCBhcyBlbmQgZGF0ZSwgc2luY2Ugd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIElSIGZvciAyMDE3DQpkZnRvdGFsJGVuZF9pbmNpZGVuY2VfMjAxN1tpcy5uYShkZnRvdGFsJGVuZF9pbmNpZGVuY2VfMjAxNyldIDwtIGFzLkRhdGUoeW1kKDIwMTgwMTAxKSkNCg0KIyBJZiBvYnNlcnZhdGlvbiBoYXMgYW4gZXZlbnQgYWZ0ZXIgMjAxNywgaXQgd2lsbCBiZWNvbWUgdGhlIGVuZCBvZiB0aGUgb2JzIHBlcmlvZCAoMjAxOC0wMS0wMSkNCmRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3IDwtIGFzLkRhdGUoaWZlbHNlKHllYXIoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcpID4gMjAxNywgYXMuRGF0ZSgiMjAxOC0wMS0wMSIpLCBkZnRvdGFsJGVuZF9pbmNpZGVuY2VfMjAxNyksIG9yaWdpbiA9ICIxOTcwLTAxLTAxIikNCmBgYA0KDQoNCg0KYGBge3J9DQojIE1ha2UgZW5kIGluY2lkZW5jZSBmb3IgZXZlcnkgeWVhcg0KZGZfMjAxOCA8LSANCiAgZGZ0b3RhbCAlPiUgDQogIGZpbHRlcigheWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE3KQ0KDQpkZl8yMDE5IDwtIA0KICBkZl8yMDE4ICU+JSANCiAgZmlsdGVyKCF5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTgpDQoNCmRmXzIwMjAgPC0gDQogIGRmXzIwMTkgJT4lIA0KICBmaWx0ZXIoIXllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOSkNCg0KZGZfMjAyMSA8LSANCiAgZGZfMjAyMCAlPiUgDQogIGZpbHRlcigheWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDIwKSANCg0KDQoNCmBgYA0KDQoNCg0KYGBge3J9DQojIGNhbGN1bGF0ZSBmb3IgZWFjaCBpbmRpdmlkdWFsIHRoZSBweSBvYnNlcnZlZCBpbiAyMDE3LiANCmRmdG90YWwkeWVhcnNfaW5fc3R1ZHlfMjAxNyA8LSBhcy5udW1lcmljKGRpZmZ0aW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgIChkZnRvdGFsJGVuZF9pbmNpZGVuY2VfMjAxNywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZ0b3RhbCRzdGFydF9zdHVkeSwgdW5pdHM9J2RheXMnKSkgLyAzNjUNCmBgYA0KDQoNCmBgYHtyfQ0KIyBDYWxjdWxhdGUgdGhlIGV2ZW50cyBpbiAyMDE3DQpldmVudHNfMjAxNyA8LSBzdWJzZXQoZGZ0b3RhbCwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE3KSANCg0KI3RoZSBUb3RhbCBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxNw0KVFBZXzIwMTcgPC0gc3VtKGRmdG90YWwkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGUgYW1vdW50IG9mIGFuYXBoeWwgcG9zc2libGUgc2hvY2tzIGluIDIwMTcgDQpUTkVfYW5hcGhQXzIwMTcgPC0gZXZlbnRzXzIwMTcgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdhbmFwaHlsX3Bvc3NpYmxlJykgJT4lIG5yb3coKQ0KDQojIGNhbGN1bGF0ZSB0aGUgSVIgaW4gMTAwMCBQWSBmb3IgYW5hcGh5bCBwb3NzaWJsZSBpbiAyMDE3DQppcm9fYW5hcGhQXzIwMTcgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8yMDE3LCBUUFlfMjAxNywgbnJvdyhkZl90b3RhbCkpDQoNCg0KIyBDb3VudCB0aGUgYW1vdW50IG9mIGFuYXBoeWwgc2hvY2tzIG5hcnJvdyBpbiAyMDE3IA0KVE5FX2FuYXBoTl8yMDE3IDwtIGV2ZW50c18yMDE3ICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiMgY2FsY3VsYXRlIHRoZSBJUiBpbiAxMDAwIFBZIGZvciBhbmFwaHlsIG5hcnJvdyBpbiAyMDE3DQppcm9fYW5hcGhOXzIwMTcgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDE3LCBUUFlfMjAxNywgbnJvdyhkZl90b3RhbCkpDQoNCiMgQ291bnQgdGhlIGFtb3VudCBvZiBnYnMgaW4gMjAxNyANClRORV9nYnNfMjAxNyA8LSBldmVudHNfMjAxNyAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2dic19uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiMgY2FsY3VsYXRlIHRoZSBJUiBpbiAxMDAwIFBZIGZvciBnYnMgaW4gMjAxNw0KaXJvX2dic18yMDE3IDwtIElSXzk1X0NJKFRORV9nYnNfMjAxNywgVFBZXzIwMTcsIG5yb3coZGZfdG90YWwpKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCiMgZm9yIGV2ZXJ5IG9ic2VydmF0aW9uIHdobyBoYXMgYW4gZXZlbnQgcHV0IGluIHRoZSBkYXRlLiANCmRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4IDwtIGFzLkRhdGUoeW1kKGRmXzIwMTgkZW5kX2RhdGVfcmVjb3JkKSkNCg0KI2ZvciBldmVyeWJvZHkgd2hvIGRvZXMgbm90IGhhdmUgYW4gZXZlbnQsIG1ha2Ugc3VyZSB0aGUgZW5kIG9mIGluY2lkZW5jZSBpcyAwMS0wMS0yMDE5LiANCmRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4W2lzLm5hKGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4KV0gPC0gYXMuRGF0ZSh5bWQoMjAxOTAxMDEpKQ0KDQojIElmIGFuIG9ic2VydmF0aW9uIGhhcyB0aGUgZXZlbnQgYWZ0ZXIgMjAxOCwgdGhlIGVuZCBvZiB0aGUgb2JzZXJ2YXRpb24gd2lsbCBiZSAwMS0wMS0yMDE5DQpkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOCA8LSBhcy5EYXRlKGlmZWxzZSh5ZWFyKGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4KSA+IDIwMTgsIGFzLkRhdGUoIjIwMTktMDEtMDEiKSwgZGZfMjAxOCRlbmRfaW5jaWRlbmNlXzIwMTgpLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpDQpkZl8yMDE4JHN0YXJ0X2luY2lkZW5jZV8yMDE4IDwtIGFzLkRhdGUoeW1kKDIwMTgwMTAxKSkNCg0KIyBDb3VudCB0aGUgcGVyc29uIHllYXJzIG9mIHRoZSBvYnNlcnZhdGlvbiBpbiAyMDE4DQpkZl8yMDE4JHllYXJzX2luX3N0dWR5XzIwMTggPC0gYXMubnVtZXJpYyhkaWZmdGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoZGZfMjAxOCRlbmRfaW5jaWRlbmNlXzIwMTgsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmXzIwMTgkc3RhcnRfaW5jaWRlbmNlXzIwMTgsIHVuaXRzPSdkYXlzJykpIC8gMzY1DQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQojIEFsbCB0aGUgZXZlbnRzIGluIDIwMTggaW4gYSBuZXcgZGF0YXNldA0KZXZlbnRzXzIwMTggPC0gc3Vic2V0KGRmdG90YWwsIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQoNCiMgVG90YWwgcGVyc29uIHllYXJzIG9ic2VydmVkIGluIDIwMTgNClRQWV8yMDE4IDwtIHN1bShkZl8yMDE4JHllYXJzX2luX3N0dWR5XzIwMTgpDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBhbmFwaHlsYXRpYyBzaG9jayBwb3NzaWJsZSBpbiAyMDE4IA0KVE5FX2FuYXBoUF8yMDE4IDwtIGV2ZW50c18yMDE4ICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkNCg0KIyBJbmNpZGVuY2UgcmF0ZSBpbiAxMDAwIFBZIGZvciBhbmFwaGFseXRpYyBzaG9jayBwb3NzaWJsZSBpbiAyMDE4DQppcm9fYW5hcGhQXzIwMTggPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8yMDE4LCBUUFlfMjAxOCwgbnJvdyhkZl8yMDE4KSkNCg0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgYW5hcGh5bGF0aWMgc2hvY2sgbmFycm93IGluIDIwMTggDQpUTkVfYW5hcGhOXzIwMTggPC0gZXZlbnRzXzIwMTggJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdhbmFwaHlsX25hcnJvdycpICU+JSBucm93KCkNCg0KIyBJUiBpbiAxMDAwIFBZIGZvciBhbmFwaGFseXRpYyBzaG9jayBuYXJvb3cgaW4gMjAxOA0KaXJvX2FuYXBoTl8yMDE4IDwtICBJUl85NV9DSShUTkVfYW5hcGhOXzIwMTgsIFRQWV8yMDE4LCBucm93KGRmXzIwMTgpKQ0KDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBHQlMgaW4gMjAxOCANClRORV9nYnNfMjAxOCA8LSBldmVudHNfMjAxOCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2dic19uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiNJUiBmb3IgZ2JzIGluIDEwMDAgUFkNCmlyb19nYnNfMjAxOCA8LSAgSVJfOTVfQ0koVE5FX2dic18yMDE4LCBUUFlfMjAxOCwgbnJvdyhkZl8yMDE4KSkNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCiMgZm9yIGV2ZXJ5IG9ic2VydmF0aW9uIHdobyBoYXMgYW4gZXZlbnQgcHV0IGluIHRoZSBkYXRlLiANCmRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5IDwtIGFzLkRhdGUoeW1kKGRmXzIwMTkkZW5kX2RhdGVfcmVjb3JkKSkNCg0KI2ZvciBldmVyeWJvZHkgd2hvIGRvZXMgbm90IGhhdmUgYW4gZXZlbnQsIG1ha2Ugc3VyZSB0aGUgZW5kIG9mIGluY2lkZW5jZSBpcyAwMS0wMS0yMDE5LiANCmRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5W2lzLm5hKGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5KV0gPC0gYXMuRGF0ZSh5bWQoMjAyMDAxMDEpKQ0KDQojIElmIGFuIG9ic2VydmF0aW9uIGhhcyB0aGUgZXZlbnQgYWZ0ZXIgMjAxOCwgdGhlIGVuZCBvZiB0aGUgb2JzZXJ2YXRpb24gd2lsbCBiZSAwMS0wMS0yMDE5DQpkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOSA8LSBhcy5EYXRlKGlmZWxzZSh5ZWFyKGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5KSA+IDIwMTksIGFzLkRhdGUoIjIwMjAtMDEtMDEiKSwgZGZfMjAxOSRlbmRfaW5jaWRlbmNlXzIwMTkpLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpDQpkZl8yMDE5JHN0YXJ0X2luY2lkZW5jZV8yMDE5IDwtIGFzLkRhdGUoeW1kKDIwMTkwMTAxKSkNCg0KIyBDb3VudCB0aGUgcGVyc29uIHllYXJzIG9mIHRoZSBvYnNlcnZhdGlvbiBpbiAyMDE4DQpkZl8yMDE5JHllYXJzX2luX3N0dWR5XzIwMTkgPC0gYXMubnVtZXJpYyhkaWZmdGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoZGZfMjAxOSRlbmRfaW5jaWRlbmNlXzIwMTksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmXzIwMTkkc3RhcnRfaW5jaWRlbmNlXzIwMTksIHVuaXRzPSdkYXlzJykpIC8gMzY1DQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQojIEFsbCB0aGUgZXZlbnRzIGluIDIwMTkgaW4gYSBuZXcgZGF0YXNldA0KZXZlbnRzXzIwMTkgPC0gc3Vic2V0KGRmdG90YWwsIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOSkgDQoNCiMgVG90YWwgcGVyc29uIHllYXJzIG9ic2VydmVkIGluIDIwMTkNClRQWV8yMDE5IDwtIHN1bShkZl8yMDE5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBhbmFwaHlsYXRpYyBzaG9jayBwb3NzaWJsZSBpbiAyMDE5IA0KVE5FX2FuYXBoUF8yMDE5IDwtIGV2ZW50c18yMDE5ICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkNCg0KIyBJbmNpZGVuY2UgcmF0ZSBpbiAxMDAwIFBZIGZvciBhbmFwaGFseXRpYyBzaG9jayBwb3NzaWJsZSBpbiAyMDE5DQppcm9fYW5hcGhQXzIwMTkgPC0gIElSXzk1X0NJKFRORV9hbmFwaFBfMjAxOSwgVFBZXzIwMTksIG5yb3coZGZfMjAxOSkpDQoNCg0KIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIG5hcnJvdyBpbiAyMDE5IA0KVE5FX2FuYXBoTl8yMDE5IDwtIGV2ZW50c18yMDE5ICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiMgSVIgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgbmFyb293IGluIDIwMTkNCmlyb19hbmFwaE5fMjAxOSA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMTksIFRQWV8yMDE5LCBucm93KGRmXzIwMTkpKQ0KDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBHQlMgaW4gMjAxOSANClRORV9nYnNfMjAxOSA8LSBldmVudHNfMjAxOSAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2dic19uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiNJUiBmb3IgZ2JzIGluIDEwMDAgUFkNCmlyb19nYnNfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMTksIFRQWV8yMDE5LCBucm93KGRmXzIwMTkpKQ0KYGBgDQoNCg0KYGBge3J9DQojIGZvciBldmVyeSBvYnNlcnZhdGlvbiB3aG8gaGFzIGFuIGV2ZW50IHB1dCBpbiB0aGUgZGF0ZS4gDQpkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMCA8LSBhcy5EYXRlKHltZChkZl8yMDIwJGVuZF9kYXRlX3JlY29yZCkpDQoNCiNmb3IgZXZlcnlib2R5IHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlIGVuZCBvZiBpbmNpZGVuY2UgaXMgMDEtMDEtMjAyMS4gDQpkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMFtpcy5uYShkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMCldIDwtIGFzLkRhdGUoeW1kKDIwMjEwMTAxKSkNCg0KIyBJZiBhbiBvYnNlcnZhdGlvbiBoYXMgdGhlIGV2ZW50IGFmdGVyIDIwMTgsIHRoZSBlbmQgb2YgdGhlIG9ic2VydmF0aW9uIHdpbGwgYmUgMDEtMDEtMjAyMA0KZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjAgPC0gYXMuRGF0ZShpZmVsc2UoeWVhcihkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMCkgPiAyMDIwLCBhcy5EYXRlKCIyMDIxLTAxLTAxIiksIGRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwKSwgb3JpZ2luID0gIjE5NzAtMDEtMDEiKQ0KZGZfMjAyMCRzdGFydF9pbmNpZGVuY2VfMjAyMCA8LSBhcy5EYXRlKHltZCgyMDIwMDEwMSkpDQoNCiMgQ291bnQgdGhlIHBlcnNvbiB5ZWFycyBvZiB0aGUgb2JzZXJ2YXRpb24gaW4gMjAxOA0KZGZfMjAyMCR5ZWFyc19pbl9zdHVkeV8yMDIwIDwtIGFzLm51bWVyaWMoZGlmZnRpbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl8yMDIwJHN0YXJ0X2luY2lkZW5jZV8yMDIwLCB1bml0cz0nZGF5cycpKSAvIDM2Ng0KDQpgYGANCg0KDQpgYGB7cn0NCg0KIyBBbGwgdGhlIGV2ZW50cyBpbiAyMDIwIGluIGEgbmV3IGRhdGFzZXQNCmV2ZW50c18yMDIwIDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KDQojIFRvdGFsIHBlcnNvbiB5ZWFycyBvYnNlcnZlZCBpbiAyMDIwDQpUUFlfMjAyMCA8LSBzdW0oZGZfMjAyMCR5ZWFyc19pbl9zdHVkeV8yMDIwKQ0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgYW5hcGh5bGF0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAyMCANClRORV9hbmFwaFBfMjAyMCA8LSBldmVudHNfMjAyMCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfcG9zc2libGUnKSAlPiUgbnJvdygpDQoNCiMgSW5jaWRlbmNlIHJhdGUgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAyMA0KaXJvX2FuYXBoUF8yMDIwIDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAyMCwgVFBZXzIwMjAsIG5yb3coZGZfMjAyMCkpDQoNCg0KIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIG5hcnJvdyBpbiAyMDIwIA0KVE5FX2FuYXBoTl8yMDIwIDwtIGV2ZW50c18yMDIwICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiMgSVIgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgbmFyb293IGluIDIwMjANCmlyb19hbmFwaE5fMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMjAsIFRQWV8yMDIwLCBucm93KGRmXzIwMjApKQ0KDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBHQlMgaW4gMjAyMCANClRORV9nYnNfMjAyMCA8LSBldmVudHNfMjAyMCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2dic19uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiNJUiBmb3IgZ2JzIGluIDEwMDAgUFkNCmlyb19nYnNfMjAyMCA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMjAsIFRQWV8yMDIwLCBucm93KGRmXzIwMjApKQ0KYGBgDQoNCg0KYGBge3J9DQpEaWFnbm9zaXMgPC0gYygnYW5hcGh5bGF4aXNfbmFycm93JywgJ2FuYXBoeWxheGlzX25hcnJvdycsICdhbmFwaHlsYXhpc19uYXJyb3cnLCAnYW5hcGh5bGF4aXNfbmFycm93JywnYW5hcGh5bGF4aXNfbmFycm93JywgJ2FuYXBoeWxheGlzX3Bvc3NpYmxlJywgJ2FuYXBoeWxheGlzX3Bvc3NpYmxlJywgJ2FuYXBoeWxheGlzX3Bvc3NpYmxlJywgJ2FuYXBoeWxheGlzX3Bvc3NpYmxlJywgJ2FuYXBoeWxheGlzX3Bvc3NpYmxlJywgJ2dic19uYXJyb3cnLCAnZ2JzX25hcnJvdycsICdnYnNfbmFycm93JywgJ2dic19uYXJyb3cnLCAnZ2JzX25hcnJvdycpDQpZZWFycyA8LSBjKCdUb3RhbCcsICcyMDE3JywgJzIwMTgnLCAnMjAxOScsICcyMDIwJywNCiAgICAgICAgICAgJ1RvdGFsJywgJzIwMTcnLCAnMjAxOCcsICcyMDE5JywgJzIwMjAnLA0KICAgICAgICAgICAnVG90YWwnLCAnMjAxNycsICcyMDE4JywgJzIwMTknLCAnMjAyMCcpDQoNCklSIDwtIGMoaXJvX2FuYXBoTiwgaXJvX2FuYXBoTl8yMDE3LCBpcm9fYW5hcGhOXzIwMTgsIGlyb19hbmFwaE5fMjAxOSwgaXJvX2FuYXBoTl8yMDIwLCBpcm9fYW5hcGhQLA0KICAgICAgICBpcm9fYW5hcGhQXzIwMTcsIGlyb19hbmFwaFBfMjAxOCwgaXJvX2FuYXBoUF8yMDE5LCBpcm9fYW5hcGhQXzIwMjAsIGlyb19nYnMsIGlyb19nYnNfMjAxNywgaXJvX2dic18yMDE4LCBpcm9fZ2JzXzIwMTksIGlyb19nYnNfMjAyMCkNCg0KDQp0YWIgPC0gZGF0YS5mcmFtZShEaWFnbm9zaXMgPSBEaWFnbm9zaXMsIFllYXIgPSBZZWFycywgJ0lSIHBlciAxMDAwIHB5JyA9IElSKQ0KYGBgDQoNCg0KYGBge3J9DQoNCm1ha2VfeWVhcl9hZ2VfYmFuZHMgPC0gZnVuY3Rpb24oZGF0YSwgYWdlX2dyb3VwKSB7DQogIG5ld19kYXRhIDwtIGRhdGEgJT4lIA0KICAgIGZpbHRlcihhZ2VfYmFuZHM9PWFnZV9ncm91cCkgDQogIHJldHVybihuZXdfZGF0YSkNCiAgfQ0KDQoNCmRmdG90YWwwMDE5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZ0b3RhbCwgJ1swLDE5XScpDQpkZnRvdGFsMjAzOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmdG90YWwsICdbMjAsMzldJykNCmRmdG90YWw0MDU5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZ0b3RhbCwgJ1s0MCw1OV0nKQ0KZGZ0b3RhbDYwNzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZnRvdGFsLCAnWzYwLDc5XScpDQpkZnRvdGFsODAgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZnRvdGFsLCAnWzgwK10nKQ0KDQpgYGANCg0KDQpgYGB7cn0NCiMgTWFrZSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYW1vdW50IG9mIGV2ZW50cw0KYW1vdW50X2V2ZW50cyA8LSBmdW5jdGlvbihkYXRhLCBkaWFnbikgew0KICBldmVudHMgPC0gZGF0YSAlPiUgDQogICAgZmlsdGVyKERpYWdub3NpcyA9PSBkaWFnbikgJT4lICBucm93KCkNCiAgcmV0dXJuKGV2ZW50cykNCn0NCmBgYA0KDQoNCmBgYHtyfQ0KI3RvdGFsIHBlcnNvbnllYXJzIGluIHN0dWR5IGZvciBhZ2ViYW5kIDAtMTkNClRQWTAwMTkgPC0gc3VtKGRmdG90YWwwMDE5JHllYXJzX2luX3N0dWR5KQ0KIyBhbW91bnQgb2YgZXZlbnRzIGZvciBlYWNoIGV2ZW50IGZvciBhZ2VfYmFuZCAwLTE5DQpUTkVfYW5hcGhQMDAxOSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWwwMDE5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOMDAxOSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWwwMDE5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2diczAwMTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMDAxOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUDAwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUDAwMTksIFRQWTAwMTksIG5yb3coZGZ0b3RhbDAwMTkpKQ0KaXJvX2FuYXBoTjAwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTjAwMTksIFRQWTAwMTksIG5yb3coZGZ0b3RhbDAwMTkpKQ0KaXJvX2diczAwMTkgPC0gSVJfOTVfQ0koVE5FX2diczAwMTksIFRQWTAwMTksIG5yb3coZGZ0b3RhbDAwMTkpKQ0KYGBgDQoNCmBgYHtyfQ0KI3RvdGFsIHBlcnNvbnllYXJzIGluIHN0dWR5IGZvciBhZ2ViYW5kIDIwLTM5DQpUUFkyMDM5IDwtIHN1bShkZnRvdGFsMjAzOSR5ZWFyc19pbl9zdHVkeSkNCiMgYW1vdW50IG9mIGV2ZW50cyBmb3IgZWFjaCBldmVudCBmb3IgYWdlX2JhbmQgMjAtMzkNClRORV9hbmFwaFAyMDM5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDIwMzksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE4yMDM5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDIwMzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzMjAzOSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWwyMDM5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDIwLTM5IA0KaXJvX2FuYXBoUDIwMzkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUDIwMzksIFRQWTIwMzksIG5yb3coZGZ0b3RhbDIwMzkpKQ0KaXJvX2FuYXBoTjIwMzkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTjIwMzksIFRQWTIwMzksIG5yb3coZGZ0b3RhbDIwMzkpKQ0KaXJvX2diczIwMzkgPC0gSVJfOTVfQ0koVE5FX2diczIwMzksIFRQWTIwMzksIG5yb3coZGZ0b3RhbDIwMzkpKQ0KYGBgDQoNCmBgYHtyfQ0KI3RvdGFsIHBlcnNvbnllYXJzIGluIHN0dWR5IGZvciBhZ2ViYW5kIDAtMTkNClRQWTQwNTkgPC0gc3VtKGRmdG90YWw0MDU5JHllYXJzX2luX3N0dWR5KQ0KIyBhbW91bnQgb2YgZXZlbnRzIGZvciBlYWNoIGV2ZW50IGZvciBhZ2VfYmFuZCAwLTE5DQpUTkVfYW5hcGhQNDA1OSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWw0MDU5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhONDA1OSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWw0MDU5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2diczQwNTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNDA1OSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUDQwNTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUDQwNTksIFRQWTQwNTksIG5yb3coZGZ0b3RhbDQwNTkpKQ0KaXJvX2FuYXBoTjQwNTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTjQwNTksIFRQWTQwNTksIG5yb3coZGZ0b3RhbDQwNTkpKQ0KaXJvX2diczQwNTkgPC0gSVJfOTVfQ0koVE5FX2diczQwNTksIFRQWTQwNTksIG5yb3coZGZ0b3RhbDQwNTkpKQ0KYGBgDQoNCmBgYHtyfQ0KI3RvdGFsIHBlcnNvbnllYXJzIGluIHN0dWR5IGZvciBhZ2ViYW5kIDAtMTkNClRQWTYwNzkgPC0gc3VtKGRmdG90YWw2MDc5JHllYXJzX2luX3N0dWR5KQ0KIyBhbW91bnQgb2YgZXZlbnRzIGZvciBlYWNoIGV2ZW50IGZvciBhZ2VfYmFuZCAwLTE5DQpUTkVfYW5hcGhQNjA3OSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWw2MDc5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhONjA3OSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWw2MDc5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2diczYwNzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNjA3OSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUDYwNzkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUDYwNzksIFRQWTYwNzksIG5yb3coZGZ0b3RhbDYwNzkpKQ0KaXJvX2FuYXBoTjYwNzkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTjYwNzksIFRQWTYwNzksIG5yb3coZGZ0b3RhbDYwNzkpKQ0KaXJvX2diczYwNzkgPC0gSVJfOTVfQ0koVE5FX2diczYwNzksIFRQWTYwNzksIG5yb3coZGZ0b3RhbDYwNzkpKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxN18wMDE5IDwtIHN1YnNldChkZnRvdGFsMDAxOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE3KSANCiN0aGUgVG90YWwgcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTcgYWdlX2JhbmQwMDE5DQpUUFlfMjAxN18wMDE5IDwtIHN1bShkZnRvdGFsMDAxOSR5ZWFyc19pbl9zdHVkeV8yMDE3KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDAwMTkgaW4gMjAxNw0KVE5FX2FuYXBoUF8wMDE5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18wMDE5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzAwMTlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzAwMTksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzAwMTlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzAwMTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfMDAxOV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMDAxOV8yMDE3LCBUUFlfMjAxN18wMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmlyb19hbmFwaE5fMDAxOV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMDAxOV8yMDE3LCBUUFlfMjAxN18wMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmlyb19nYnNfMDAxOV8yMDE3IDwtIElSXzk1X0NJKFRORV9nYnNfMDAxOV8yMDE3LCBUUFlfMjAxN18wMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxN18yMDM5IDwtIHN1YnNldChkZnRvdGFsMjAzOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE3KSANCiN0aGUgVG90YWwgcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTcgYWdlX2JhbmQyMDM5DQpUUFlfMjAxN18yMDM5IDwtIHN1bShkZnRvdGFsMjAzOSR5ZWFyc19pbl9zdHVkeV8yMDE3KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDIwMzkgaW4gMjAxNw0KVE5FX2FuYXBoUF8yMDM5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18yMDM5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzIwMzlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzIwMzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzIwMzlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzIwMzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfMjAzOV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAzOV8yMDE3LCBUUFlfMjAxN18yMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmlyb19hbmFwaE5fMjAzOV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMjAzOV8yMDE3LCBUUFlfMjAxN18yMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmlyb19nYnNfMjAzOV8yMDE3IDwtIElSXzk1X0NJKFRORV9nYnNfMjAzOV8yMDE3LCBUUFlfMjAxN18yMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxN180MDU5IDwtIHN1YnNldChkZnRvdGFsNDA1OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE3KSANCiN0aGUgVG90YWwgcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTcgYWdlX2JhbmQ0MDU5DQpUUFlfMjAxN180MDU5IDwtIHN1bShkZnRvdGFsNDA1OSR5ZWFyc19pbl9zdHVkeV8yMDE3KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDQwNTkgaW4gMjAxNw0KVE5FX2FuYXBoUF80MDU5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN180MDU5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzQwNTlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzQwNTksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzQwNTlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzQwNTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfNDA1OV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNDA1OV8yMDE3LCBUUFlfMjAxN180MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmlyb19hbmFwaE5fNDA1OV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNDA1OV8yMDE3LCBUUFlfMjAxN180MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmlyb19nYnNfNDA1OV8yMDE3IDwtIElSXzk1X0NJKFRORV9nYnNfNDA1OV8yMDE3LCBUUFlfMjAxN180MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxN182MDc5IDwtIHN1YnNldChkZnRvdGFsNjA3OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE3KSANCiN0aGUgVG90YWwgcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTcgYWdlX2JhbmQ2MDc5DQpUUFlfMjAxN182MDc5IDwtIHN1bShkZnRvdGFsNjA3OSR5ZWFyc19pbl9zdHVkeV8yMDE3KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDYwNzkgaW4gMjAxNw0KVE5FX2FuYXBoUF82MDc5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN182MDc5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzYwNzlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzYwNzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzYwNzlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzYwNzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfNjA3OV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNjA3OV8yMDE3LCBUUFlfMjAxN182MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmlyb19hbmFwaE5fNjA3OV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNjA3OV8yMDE3LCBUUFlfMjAxN182MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmlyb19nYnNfNjA3OV8yMDE3IDwtIElSXzk1X0NJKFRORV9nYnNfNjA3OV8yMDE3LCBUUFlfMjAxN182MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmBgYA0KDQoNCg0KYGBge3J9DQpkZl8yMDE4XzAwMTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzAsMTldJykNCmRmXzIwMThfMjAzOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTgsICdbMjAsMzldJykNCmRmXzIwMThfNDA1OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTgsICdbNDAsNTldJykNCmRmXzIwMThfNjA3OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTgsICdbNjAsNzldJykNCmBgYA0KDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE3IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE4XzAwMTkgPC0gc3Vic2V0KGRmXzIwMThfMDAxOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KSANCiN0aGUgXzIwMThfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE4IGFnZV9iYW5kMDAxOQ0KVFBZXzIwMThfMDAxOSA8LSBzdW0oZGZfMjAxOF8wMDE5JHllYXJzX2luX3N0dWR5XzIwMTgpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMDAxOSBpbiAyMDE4DQpUTkVfYW5hcGhQXzAwMTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzAwMTksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fMDAxOV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfMDAxOSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfMDAxOV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfMDAxOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF8wMDE5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8wMDE5XzIwMTgsIFRQWV8yMDE4XzAwMTksIG5yb3coZGZfMjAxOF8wMDE5KSkNCmlyb19hbmFwaE5fMDAxOV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMDAxOV8yMDE4LCBUUFlfMjAxOF8wMDE5LCBucm93KGRmXzIwMThfMDAxOSkpDQppcm9fZ2JzXzAwMTlfMjAxOCA8LSBJUl85NV9DSShUTkVfZ2JzXzAwMTlfMjAxOCwgVFBZXzIwMThfMDAxOSwgbnJvdyhkZl8yMDE4XzAwMTkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE4IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE4XzIwMzkgPC0gc3Vic2V0KGRmXzIwMThfMjAzOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KSANCiN0aGUgXzIwMThfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE4IGFnZV9iYW5kMjAzOQ0KVFBZXzIwMThfMjAzOSA8LSBzdW0oZGZfMjAxOF8yMDM5JHllYXJzX2luX3N0dWR5XzIwMTgpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMjAzOSBpbiAyMDE4DQpUTkVfYW5hcGhQXzIwMzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzIwMzksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fMjAzOV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfMjAzOSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfMjAzOV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfMjAzOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF8yMDM5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8yMDM5XzIwMTgsIFRQWV8yMDE4XzIwMzksIG5yb3coZGZfMjAxOF8yMDM5KSkNCmlyb19hbmFwaE5fMjAzOV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMjAzOV8yMDE4LCBUUFlfMjAxOF8yMDM5LCBucm93KGRmXzIwMThfMjAzOSkpDQppcm9fZ2JzXzIwMzlfMjAxOCA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMzlfMjAxOCwgVFBZXzIwMThfMjAzOSwgbnJvdyhkZl8yMDE4XzIwMzkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE4IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE4XzQwNTkgPC0gc3Vic2V0KGRmXzIwMThfNDA1OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KSANCiN0aGUgXzIwMThfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE4IGFnZV9iYW5kNDA1OQ0KVFBZXzIwMThfNDA1OSA8LSBzdW0oZGZfMjAxOF80MDU5JHllYXJzX2luX3N0dWR5XzIwMTgpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNDA1OSBpbiAyMDE4DQpUTkVfYW5hcGhQXzQwNTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzQwNTksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fNDA1OV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfNDA1OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfNDA1OV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfNDA1OSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF80MDU5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF80MDU5XzIwMTgsIFRQWV8yMDE4XzQwNTksIG5yb3coZGZfMjAxOF80MDU5KSkNCmlyb19hbmFwaE5fNDA1OV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNDA1OV8yMDE4LCBUUFlfMjAxOF80MDU5LCBucm93KGRmXzIwMThfNDA1OSkpDQppcm9fZ2JzXzQwNTlfMjAxOCA8LSBJUl85NV9DSShUTkVfZ2JzXzQwNTlfMjAxOCwgVFBZXzIwMThfNDA1OSwgbnJvdyhkZl8yMDE4XzQwNTkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE4IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE4XzYwNzkgPC0gc3Vic2V0KGRmXzIwMThfNjA3OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KSANCiN0aGUgXzIwMThfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE4IGFnZV9iYW5kNjA3OQ0KVFBZXzIwMThfNjA3OSA8LSBzdW0oZGZfMjAxOF82MDc5JHllYXJzX2luX3N0dWR5XzIwMTgpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNjA3OSBpbiAyMDE4DQpUTkVfYW5hcGhQXzYwNzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzYwNzksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fNjA3OV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfNjA3OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfNjA3OV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfNjA3OSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF82MDc5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF82MDc5XzIwMTgsIFRQWV8yMDE4XzYwNzksIG5yb3coZGZfMjAxOF82MDc5KSkNCmlyb19hbmFwaE5fNjA3OV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNjA3OV8yMDE4LCBUUFlfMjAxOF82MDc5LCBucm93KGRmXzIwMThfNjA3OSkpDQppcm9fZ2JzXzYwNzlfMjAxOCA8LSBJUl85NV9DSShUTkVfZ2JzXzYwNzlfMjAxOCwgVFBZXzIwMThfNjA3OSwgbnJvdyhkZl8yMDE4XzYwNzkpKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmRmXzIwMTlfMDAxOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbMCwxOV0nKQ0KZGZfMjAxOV8yMDM5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAxOSwgJ1syMCwzOV0nKQ0KZGZfMjAxOV80MDU5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAxOSwgJ1s0MCw1OV0nKQ0KZGZfMjAxOV82MDc5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAxOSwgJ1s2MCw3OV0nKQ0KYGBgDQoNCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTlfMDAxOSA8LSBzdWJzZXQoZGZfMjAxOV8wMDE5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIA0KI3RoZSBfMjAxOV8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTkgYWdlX2JhbmQwMDE5DQpUUFlfMjAxOV8wMDE5IDwtIHN1bShkZl8yMDE5XzAwMTkkeWVhcnNfaW5fc3R1ZHlfMjAxOSkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAwMDE5IGluIDIwMTkNClRORV9hbmFwaFBfMDAxOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8wMDE5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV8wMDE5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18wMDE5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV8wMDE5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzAwMTlfMjAxOSA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzAwMTlfMjAxOSwgVFBZXzIwMTlfMDAxOSwgbnJvdyhkZl8yMDE5XzAwMTkpKQ0KaXJvX2FuYXBoTl8wMDE5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8wMDE5XzIwMTksIFRQWV8yMDE5XzAwMTksIG5yb3coZGZfMjAxOV8wMDE5KSkNCmlyb19nYnNfMDAxOV8yMDE5IDwtIElSXzk1X0NJKFRORV9nYnNfMDAxOV8yMDE5LCBUUFlfMjAxOV8wMDE5LCBucm93KGRmXzIwMTlfMDAxOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTkgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTlfMjAzOSA8LSBzdWJzZXQoZGZfMjAxOV8yMDM5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIA0KI3RoZSBfMjAxOV8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTkgYWdlX2JhbmQyMDM5DQpUUFlfMjAxOV8yMDM5IDwtIHN1bShkZl8yMDE5XzIwMzkkeWVhcnNfaW5fc3R1ZHlfMjAxOSkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAyMDM5IGluIDIwMTkNClRORV9hbmFwaFBfMjAzOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMjAzOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8yMDM5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV8yMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18yMDM5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV8yMDM5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzIwMzlfMjAxOSA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzIwMzlfMjAxOSwgVFBZXzIwMTlfMjAzOSwgbnJvdyhkZl8yMDE5XzIwMzkpKQ0KaXJvX2FuYXBoTl8yMDM5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDM5XzIwMTksIFRQWV8yMDE5XzIwMzksIG5yb3coZGZfMjAxOV8yMDM5KSkNCmlyb19nYnNfMjAzOV8yMDE5IDwtIElSXzk1X0NJKFRORV9nYnNfMjAzOV8yMDE5LCBUUFlfMjAxOV8yMDM5LCBucm93KGRmXzIwMTlfMjAzOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTkgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTlfNDA1OSA8LSBzdWJzZXQoZGZfMjAxOV80MDU5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIA0KI3RoZSBfMjAxOV8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTkgYWdlX2JhbmQ0MDU5DQpUUFlfMjAxOV80MDU5IDwtIHN1bShkZl8yMDE5XzQwNTkkeWVhcnNfaW5fc3R1ZHlfMjAxOSkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA0MDU5IGluIDIwMTkNClRORV9hbmFwaFBfNDA1OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl80MDU5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV80MDU5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic180MDU5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV80MDU5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzQwNTlfMjAxOSA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzQwNTlfMjAxOSwgVFBZXzIwMTlfNDA1OSwgbnJvdyhkZl8yMDE5XzQwNTkpKQ0KaXJvX2FuYXBoTl80MDU5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl80MDU5XzIwMTksIFRQWV8yMDE5XzQwNTksIG5yb3coZGZfMjAxOV80MDU5KSkNCmlyb19nYnNfNDA1OV8yMDE5IDwtIElSXzk1X0NJKFRORV9nYnNfNDA1OV8yMDE5LCBUUFlfMjAxOV80MDU5LCBucm93KGRmXzIwMTlfNDA1OSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTkgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTlfNjA3OSA8LSBzdWJzZXQoZGZfMjAxOV82MDc5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIA0KI3RoZSBfMjAxOV8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTkgYWdlX2JhbmQ2MDc5DQpUUFlfMjAxOV82MDc5IDwtIHN1bShkZl8yMDE5XzYwNzkkeWVhcnNfaW5fc3R1ZHlfMjAxOSkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA2MDc5IGluIDIwMTkNClRORV9hbmFwaFBfNjA3OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl82MDc5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV82MDc5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic182MDc5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV82MDc5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzYwNzlfMjAxOSA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzYwNzlfMjAxOSwgVFBZXzIwMTlfNjA3OSwgbnJvdyhkZl8yMDE5XzYwNzkpKQ0KaXJvX2FuYXBoTl82MDc5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl82MDc5XzIwMTksIFRQWV8yMDE5XzYwNzksIG5yb3coZGZfMjAxOV82MDc5KSkNCmlyb19nYnNfNjA3OV8yMDE5IDwtIElSXzk1X0NJKFRORV9nYnNfNjA3OV8yMDE5LCBUUFlfMjAxOV82MDc5LCBucm93KGRmXzIwMTlfNjA3OSkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KZGZfMjAyMF8wMDE5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1swLDE5XScpDQpkZl8yMDIwXzIwMzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDIwLCAnWzIwLDM5XScpDQpkZl8yMDIwXzQwNTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDIwLCAnWzQwLDU5XScpDQpkZl8yMDIwXzYwNzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDIwLCAnWzYwLDc5XScpDQpgYGANCg0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAyMF8wMDE5IDwtIHN1YnNldChkZl8yMDIwXzAwMTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAyMCkgDQojdGhlIF8yMDIwXyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAyMCBhZ2VfYmFuZDAwMTkNClRQWV8yMDIwXzAwMTkgPC0gc3VtKGRmXzIwMjBfMDAxOSR5ZWFyc19pbl9zdHVkeV8yMDIwKQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDAwMTkgaW4gMjAyMA0KVE5FX2FuYXBoUF8wMDE5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8wMDE5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzAwMTlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzAwMTksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzAwMTlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzAwMTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfMDAxOV8yMDIwIDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMDAxOV8yMDIwLCBUUFlfMjAyMF8wMDE5LCBucm93KGRmXzIwMjBfMDAxOSkpDQppcm9fYW5hcGhOXzAwMTlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzAwMTlfMjAyMCwgVFBZXzIwMjBfMDAxOSwgbnJvdyhkZl8yMDIwXzAwMTkpKQ0KaXJvX2dic18wMDE5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic18wMDE5XzIwMjAsIFRQWV8yMDIwXzAwMTksIG5yb3coZGZfMjAyMF8wMDE5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAyMCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAyMF8yMDM5IDwtIHN1YnNldChkZl8yMDIwXzIwMzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAyMCkgDQojdGhlIF8yMDIwXyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAyMCBhZ2VfYmFuZDIwMzkNClRQWV8yMDIwXzIwMzkgPC0gc3VtKGRmXzIwMjBfMjAzOSR5ZWFyc19pbl9zdHVkeV8yMDIwKQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDIwMzkgaW4gMjAyMA0KVE5FX2FuYXBoUF8yMDM5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8yMDM5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzIwMzlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzIwMzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzIwMzlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzIwMzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfMjAzOV8yMDIwIDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAzOV8yMDIwLCBUUFlfMjAyMF8yMDM5LCBucm93KGRmXzIwMjBfMjAzOSkpDQppcm9fYW5hcGhOXzIwMzlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMzlfMjAyMCwgVFBZXzIwMjBfMjAzOSwgbnJvdyhkZl8yMDIwXzIwMzkpKQ0KaXJvX2dic18yMDM5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic18yMDM5XzIwMjAsIFRQWV8yMDIwXzIwMzksIG5yb3coZGZfMjAyMF8yMDM5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAyMCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAyMF80MDU5IDwtIHN1YnNldChkZl8yMDIwXzQwNTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAyMCkgDQojdGhlIF8yMDIwXyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAyMCBhZ2VfYmFuZDQwNTkNClRQWV8yMDIwXzQwNTkgPC0gc3VtKGRmXzIwMjBfNDA1OSR5ZWFyc19pbl9zdHVkeV8yMDIwKQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDQwNTkgaW4gMjAyMA0KVE5FX2FuYXBoUF80MDU5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF80MDU5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzQwNTlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzQwNTksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzQwNTlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzQwNTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfNDA1OV8yMDIwIDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNDA1OV8yMDIwLCBUUFlfMjAyMF80MDU5LCBucm93KGRmXzIwMjBfNDA1OSkpDQppcm9fYW5hcGhOXzQwNTlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzQwNTlfMjAyMCwgVFBZXzIwMjBfNDA1OSwgbnJvdyhkZl8yMDIwXzQwNTkpKQ0KaXJvX2dic180MDU5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic180MDU5XzIwMjAsIFRQWV8yMDIwXzQwNTksIG5yb3coZGZfMjAyMF80MDU5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAyMCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAyMF82MDc5IDwtIHN1YnNldChkZl8yMDIwXzYwNzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAyMCkgDQojdGhlIF8yMDIwXyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAyMCBhZ2VfYmFuZDYwNzkNClRQWV8yMDIwXzYwNzkgPC0gc3VtKGRmXzIwMjBfNjA3OSR5ZWFyc19pbl9zdHVkeV8yMDIwKQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDYwNzkgaW4gMjAyMA0KVE5FX2FuYXBoUF82MDc5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF82MDc5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzYwNzlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzYwNzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzYwNzlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzYwNzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfNjA3OV8yMDIwIDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNjA3OV8yMDIwLCBUUFlfMjAyMF82MDc5LCBucm93KGRmXzIwMjBfNjA3OSkpDQppcm9fYW5hcGhOXzYwNzlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzYwNzlfMjAyMCwgVFBZXzIwMjBfNjA3OSwgbnJvdyhkZl8yMDIwXzYwNzkpKQ0KaXJvX2dic182MDc5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic182MDc5XzIwMjAsIFRQWV8yMDIwXzYwNzksIG5yb3coZGZfMjAyMF82MDc5KSkNCmBgYA0KDQoNCg0KYGBge3J9DQpEaWFnMSA8LSByZXAoJ0FuYXBoeWxheGlzIG5hcnJvdycsIHRpbWVzPTI1KQ0KRGlhZzIgPC0gcmVwKCdBbmFwaHlsYXhpcyBwb3NzaWJsZScsIHRpbWVzPTI1KQ0KRGlhZzMgPC0gcmVwKCdnYnMgbmFycm93JywgdGltZXM9MjUpDQphbGxfZGlhZyA8LSBjKERpYWcxLCBEaWFnMiwgRGlhZzMpDQoNCmFsbF95ZWFycyA8LSByZXAoYygnVG90YWwnLCAnMjAxNycsICcyMDE4JywgJzIwMTknLCAnMjAyMCcpLCB0aW1lcz0xNSkNCg0KcmVwX3RvdGFsIDwtIHJlcCgnVG90YWwnLCB0aW1lcz01KQ0KcmVwXzAwMTkgPC0gcmVwKCcwLTE5JywgdGltZXM9NSkNCnJlcF8yMDM5IDwtIHJlcCgnMjAtMzknLCB0aW1lcz01KQ0KcmVwXzQwNTkgPC0gcmVwKCc0MC01OScsIHRpbWVzPTUpDQpyZXBfNjA3OSA8LSByZXAoJzYwLTc5JywgdGltZXM9NSkNCg0KYWxsX2FnZXMgPC0gcmVwKGMocmVwX3RvdGFsLCByZXBfMDAxOSwgcmVwXzIwMzksIHJlcF80MDU5LCByZXBfNjA3OSksIHRpbWVzPTMpDQoNCg0KDQpjb3VudF9ldmVudHMgPC0gYygNCiAgVE5FX2FuYXBoTiwgVE5FX2FuYXBoTl8yMDE3LCBUTkVfYW5hcGhOXzIwMTgsIA0KICBUTkVfYW5hcGhOXzIwMTksIFRORV9hbmFwaE5fMjAyMCwgDQogIFRORV9hbmFwaE4wMDE5LCBUTkVfYW5hcGhOXzAwMTlfMjAxNywgVE5FX2FuYXBoTl8wMDE5XzIwMTgsDQogIFRORV9hbmFwaE5fMDAxOV8yMDE5LCBUTkVfYW5hcGhOXzAwMTlfMjAyMCwgDQogIFRORV9hbmFwaE4yMDM5LCBUTkVfYW5hcGhOXzIwMzlfMjAxNywgVE5FX2FuYXBoTl8yMDM5XzIwMTgsDQogIFRORV9hbmFwaE5fMjAzOV8yMDE5LCBUTkVfYW5hcGhOXzIwMzlfMjAyMCwNCiAgVE5FX2FuYXBoTjQwNTksIFRORV9hbmFwaE5fNDA1OV8yMDE3LCBUTkVfYW5hcGhOXzQwNTlfMjAxOCwNCiAgVE5FX2FuYXBoTl80MDU5XzIwMTksIFRORV9hbmFwaE5fNDA1OV8yMDIwLA0KICBUTkVfYW5hcGhONjA3OSwgVE5FX2FuYXBoTl82MDc5XzIwMTcsIFRORV9hbmFwaE5fNjA3OV8yMDE4LA0KICBUTkVfYW5hcGhOXzYwNzlfMjAxOSwgVE5FX2FuYXBoTl82MDc5XzIwMjAsDQogICMjIyMgQW5hcGggUG9zc2libGUgDQogIFRORV9hbmFwaFAsIFRORV9hbmFwaFBfMjAxNywgVE5FX2FuYXBoUF8yMDE4LCANCiAgVE5FX2FuYXBoUF8yMDE5LCBUTkVfYW5hcGhQXzIwMjAsIA0KICBUTkVfYW5hcGhQMDAxOSwgVE5FX2FuYXBoUF8wMDE5XzIwMTcsIFRORV9hbmFwaFBfMDAxOV8yMDE4LA0KICBUTkVfYW5hcGhQXzAwMTlfMjAxOSwgVE5FX2FuYXBoUF8wMDE5XzIwMjAsIA0KICBUTkVfYW5hcGhQMjAzOSwgVE5FX2FuYXBoUF8yMDM5XzIwMTcsIFRORV9hbmFwaFBfMjAzOV8yMDE4LA0KICBUTkVfYW5hcGhQXzIwMzlfMjAxOSwgVE5FX2FuYXBoUF8yMDM5XzIwMjAsDQogIFRORV9hbmFwaFA0MDU5LCBUTkVfYW5hcGhQXzQwNTlfMjAxNywgVE5FX2FuYXBoUF80MDU5XzIwMTgsDQogIFRORV9hbmFwaFBfNDA1OV8yMDE5LCBUTkVfYW5hcGhQXzQwNTlfMjAyMCwNCiAgVE5FX2FuYXBoUDYwNzksIFRORV9hbmFwaFBfNjA3OV8yMDE3LCBUTkVfYW5hcGhQXzYwNzlfMjAxOCwNCiAgVE5FX2FuYXBoUF82MDc5XzIwMTksIFRORV9hbmFwaFBfNjA3OV8yMDIwLA0KICAjIyMjIEdCUyANCiAgVE5FX2dicywgVE5FX2dic18yMDE3LCBUTkVfZ2JzXzIwMTgsIA0KICBUTkVfZ2JzXzIwMTksIFRORV9nYnNfMjAyMCwgDQogIFRORV9nYnMwMDE5LCBUTkVfZ2JzXzAwMTlfMjAxNywgVE5FX2dic18wMDE5XzIwMTgsDQogIFRORV9nYnNfMDAxOV8yMDE5LCBUTkVfZ2JzXzAwMTlfMjAyMCwgDQogIFRORV9nYnMyMDM5LCBUTkVfZ2JzXzIwMzlfMjAxNywgVE5FX2dic18yMDM5XzIwMTgsDQogIFRORV9nYnNfMjAzOV8yMDE5LCBUTkVfZ2JzXzIwMzlfMjAyMCwNCiAgVE5FX2diczQwNTksIFRORV9nYnNfNDA1OV8yMDE3LCBUTkVfZ2JzXzQwNTlfMjAxOCwNCiAgVE5FX2dic180MDU5XzIwMTksIFRORV9nYnNfNDA1OV8yMDIwLA0KICBUTkVfZ2JzNjA3OSwgVE5FX2dic182MDc5XzIwMTcsIFRORV9nYnNfNjA3OV8yMDE4LA0KICBUTkVfZ2JzXzYwNzlfMjAxOSwgVE5FX2dic182MDc5XzIwMjANCiAgKQ0KDQoNClBlcnNZZWFyIDwtIGMoVFBZLCBUUFlfMjAxNywgVFBZXzIwMTgsIA0KICBUUFlfMjAxOSwgVFBZXzIwMjAsIA0KICBUUFkwMDE5LCBUUFlfMjAxN18wMDE5LCBUUFlfMjAxOF8wMDE5LA0KICBUUFlfMjAxOV8wMDE5LCBUUFlfMjAyMF8wMDE5LCANCiAgVFBZMjAzOSwgVFBZXzIwMTdfMjAzOSwgVFBZXzIwMThfMjAzOSwNCiAgVFBZXzIwMTlfMjAzOSwgVFBZXzIwMjBfMjAzOSwNCiAgVFBZNDA1OSwgVFBZXzIwMTdfNDA1OSwgVFBZXzIwMThfNDA1OSwNCiAgVFBZXzIwMTlfNDA1OSwgVFBZXzIwMjBfNDA1OSwNCiAgVFBZNjA3OSwgVFBZXzIwMTdfNDA1OSwgVFBZXzIwMThfNDA1OSwNCiAgVFBZXzIwMTlfNDA1OSwgVFBZXzIwMjBfNDA1OSkNCg0KDQpwZXJzX3llYXJfYWxsIDwtIHJlcChQZXJzWWVhciwgdGltZXM9MykNCg0KYGBgDQoNCmBgYHtyfQ0KSVJfMTAwMFBZIDwtICBhcy5udW1lcmljKGMoDQogIGlyb19hbmFwaE5bMV0sIGlyb19hbmFwaE5fMjAxN1sxXSwgaXJvX2FuYXBoTl8yMDE4WzFdLCANCiAgaXJvX2FuYXBoTl8yMDE5WzFdLCBpcm9fYW5hcGhOXzIwMjBbMV0sIA0KICBpcm9fYW5hcGhOMDAxOVsxXSwgaXJvX2FuYXBoTl8wMDE5XzIwMTdbMV0sIGlyb19hbmFwaE5fMDAxOV8yMDE4WzFdLA0KICBpcm9fYW5hcGhOXzAwMTlfMjAxOVsxXSwgaXJvX2FuYXBoTl8wMDE5XzIwMjBbMV0sIA0KICBpcm9fYW5hcGhOMjAzOVsxXSwgaXJvX2FuYXBoTl8yMDM5XzIwMTdbMV0sIGlyb19hbmFwaE5fMjAzOV8yMDE4WzFdLA0KICBpcm9fYW5hcGhOXzIwMzlfMjAxOVsxXSwgaXJvX2FuYXBoTl8yMDM5XzIwMjBbMV0sDQogIGlyb19hbmFwaE40MDU5WzFdLCBpcm9fYW5hcGhOXzQwNTlfMjAxN1sxXSwgaXJvX2FuYXBoTl80MDU5XzIwMThbMV0sDQogIGlyb19hbmFwaE5fNDA1OV8yMDE5WzFdLCBpcm9fYW5hcGhOXzQwNTlfMjAyMFsxXSwNCiAgaXJvX2FuYXBoTjYwNzlbMV0sIGlyb19hbmFwaE5fNjA3OV8yMDE3WzFdLCBpcm9fYW5hcGhOXzYwNzlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoTl82MDc5XzIwMTlbMV0sIGlyb19hbmFwaE5fNjA3OV8yMDIwWzFdLA0KICAjIyMjIEFuYXBoIFBvc3NpYmxlIA0KICBpcm9fYW5hcGhQWzFdLCBpcm9fYW5hcGhQXzIwMTdbMV0sIGlyb19hbmFwaFBfMjAxOFsxXSwgDQogIGlyb19hbmFwaFBfMjAxOVsxXSwgaXJvX2FuYXBoUF8yMDIwWzFdLCANCiAgaXJvX2FuYXBoUDAwMTlbMV0sIGlyb19hbmFwaFBfMDAxOV8yMDE3WzFdLCBpcm9fYW5hcGhQXzAwMTlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoUF8wMDE5XzIwMTlbMV0sIGlyb19hbmFwaFBfMDAxOV8yMDIwWzFdLCANCiAgaXJvX2FuYXBoUDIwMzlbMV0sIGlyb19hbmFwaFBfMjAzOV8yMDE3WzFdLCBpcm9fYW5hcGhQXzIwMzlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoUF8yMDM5XzIwMTlbMV0sIGlyb19hbmFwaFBfMjAzOV8yMDIwWzFdLA0KICBpcm9fYW5hcGhQNDA1OVsxXSwgaXJvX2FuYXBoUF80MDU5XzIwMTdbMV0sIGlyb19hbmFwaFBfNDA1OV8yMDE4WzFdLA0KICBpcm9fYW5hcGhQXzQwNTlfMjAxOVsxXSwgaXJvX2FuYXBoUF80MDU5XzIwMjBbMV0sDQogIGlyb19hbmFwaFA2MDc5WzFdLCBpcm9fYW5hcGhQXzYwNzlfMjAxN1sxXSwgaXJvX2FuYXBoUF82MDc5XzIwMThbMV0sDQogIGlyb19hbmFwaFBfNjA3OV8yMDE5WzFdLCBpcm9fYW5hcGhQXzYwNzlfMjAyMFsxXSwNCiAgIyMjIyBHQlMgDQogICAgaXJvX2dic1sxXSwgaXJvX2dic18yMDE3WzFdLCBpcm9fZ2JzXzIwMThbMV0sIA0KICBpcm9fZ2JzXzIwMTlbMV0sIGlyb19nYnNfMjAyMFsxXSwgDQogIGlyb19nYnMwMDE5WzFdLCBpcm9fZ2JzXzAwMTlfMjAxN1sxXSwgaXJvX2dic18wMDE5XzIwMThbMV0sDQogIGlyb19nYnNfMDAxOV8yMDE5WzFdLCBpcm9fZ2JzXzAwMTlfMjAyMFsxXSwgDQogIGlyb19nYnMyMDM5WzFdLCBpcm9fZ2JzXzIwMzlfMjAxN1sxXSwgaXJvX2dic18yMDM5XzIwMThbMV0sDQogIGlyb19nYnNfMjAzOV8yMDE5WzFdLCBpcm9fZ2JzXzIwMzlfMjAyMFsxXSwNCiAgaXJvX2diczQwNTlbMV0sIGlyb19nYnNfNDA1OV8yMDE3WzFdLCBpcm9fZ2JzXzQwNTlfMjAxOFsxXSwNCiAgaXJvX2dic180MDU5XzIwMTlbMV0sIGlyb19nYnNfNDA1OV8yMDIwWzFdLA0KICBpcm9fZ2JzNjA3OVsxXSwgaXJvX2dic182MDc5XzIwMTdbMV0sIGlyb19nYnNfNjA3OV8yMDE4WzFdLA0KICBpcm9fZ2JzXzYwNzlfMjAxOVsxXSwgaXJvX2dic182MDc5XzIwMjBbMV0NCiAgKSkNCmBgYA0KDQpgYGB7cn0NCklSXzEwMDBQWV85NUwgPC0gYXMubnVtZXJpYyhjKA0KICBpcm9fYW5hcGhOWzJdLCBpcm9fYW5hcGhOXzIwMTdbMl0sIGlyb19hbmFwaE5fMjAxOFsyXSwgDQogIGlyb19hbmFwaE5fMjAxOVsyXSwgaXJvX2FuYXBoTl8yMDIwWzJdLCANCiAgaXJvX2FuYXBoTjAwMTlbMl0sIGlyb19hbmFwaE5fMDAxOV8yMDE3WzJdLCBpcm9fYW5hcGhOXzAwMTlfMjAxOFsyXSwNCiAgaXJvX2FuYXBoTl8wMDE5XzIwMTlbMl0sIGlyb19hbmFwaE5fMDAxOV8yMDIwWzJdLCANCiAgaXJvX2FuYXBoTjIwMzlbMl0sIGlyb19hbmFwaE5fMjAzOV8yMDE3WzJdLCBpcm9fYW5hcGhOXzIwMzlfMjAxOFsyXSwNCiAgaXJvX2FuYXBoTl8yMDM5XzIwMTlbMl0sIGlyb19hbmFwaE5fMjAzOV8yMDIwWzJdLA0KICBpcm9fYW5hcGhONDA1OVsyXSwgaXJvX2FuYXBoTl80MDU5XzIwMTdbMl0sIGlyb19hbmFwaE5fNDA1OV8yMDE4WzJdLA0KICBpcm9fYW5hcGhOXzQwNTlfMjAxOVsyXSwgaXJvX2FuYXBoTl80MDU5XzIwMjBbMl0sDQogIGlyb19hbmFwaE42MDc5WzJdLCBpcm9fYW5hcGhOXzYwNzlfMjAxN1syXSwgaXJvX2FuYXBoTl82MDc5XzIwMThbMl0sDQogIGlyb19hbmFwaE5fNjA3OV8yMDE5WzJdLCBpcm9fYW5hcGhOXzYwNzlfMjAyMFsyXSwNCiAgIyMjIyBBbmFwaCBQb3NzaWJsZSANCiAgaXJvX2FuYXBoUFsyXSwgaXJvX2FuYXBoUF8yMDE3WzJdLCBpcm9fYW5hcGhQXzIwMThbMl0sIA0KICBpcm9fYW5hcGhQXzIwMTlbMl0sIGlyb19hbmFwaFBfMjAyMFsyXSwgDQogIGlyb19hbmFwaFAwMDE5WzJdLCBpcm9fYW5hcGhQXzAwMTlfMjAxN1syXSwgaXJvX2FuYXBoUF8wMDE5XzIwMThbMl0sDQogIGlyb19hbmFwaFBfMDAxOV8yMDE5WzJdLCBpcm9fYW5hcGhQXzAwMTlfMjAyMFsyXSwgDQogIGlyb19hbmFwaFAyMDM5WzJdLCBpcm9fYW5hcGhQXzIwMzlfMjAxN1syXSwgaXJvX2FuYXBoUF8yMDM5XzIwMThbMl0sDQogIGlyb19hbmFwaFBfMjAzOV8yMDE5WzJdLCBpcm9fYW5hcGhQXzIwMzlfMjAyMFsyXSwNCiAgaXJvX2FuYXBoUDQwNTlbMl0sIGlyb19hbmFwaFBfNDA1OV8yMDE3WzJdLCBpcm9fYW5hcGhQXzQwNTlfMjAxOFsyXSwNCiAgaXJvX2FuYXBoUF80MDU5XzIwMTlbMl0sIGlyb19hbmFwaFBfNDA1OV8yMDIwWzJdLA0KICBpcm9fYW5hcGhQNjA3OVsyXSwgaXJvX2FuYXBoUF82MDc5XzIwMTdbMl0sIGlyb19hbmFwaFBfNjA3OV8yMDE4WzJdLA0KICBpcm9fYW5hcGhQXzYwNzlfMjAxOVsyXSwgaXJvX2FuYXBoUF82MDc5XzIwMjBbMl0sDQogICMjIyMgR0JTIA0KICAgIGlyb19nYnNbMl0sIGlyb19nYnNfMjAxN1syXSwgaXJvX2dic18yMDE4WzJdLCANCiAgaXJvX2dic18yMDE5WzJdLCBpcm9fZ2JzXzIwMjBbMl0sIA0KICBpcm9fZ2JzMDAxOVsyXSwgaXJvX2dic18wMDE5XzIwMTdbMl0sIGlyb19nYnNfMDAxOV8yMDE4WzJdLA0KICBpcm9fZ2JzXzAwMTlfMjAxOVsyXSwgaXJvX2dic18wMDE5XzIwMjBbMl0sIA0KICBpcm9fZ2JzMjAzOVsyXSwgaXJvX2dic18yMDM5XzIwMTdbMl0sIGlyb19nYnNfMjAzOV8yMDE4WzJdLA0KICBpcm9fZ2JzXzIwMzlfMjAxOVsyXSwgaXJvX2dic18yMDM5XzIwMjBbMl0sDQogIGlyb19nYnM0MDU5WzJdLCBpcm9fZ2JzXzQwNTlfMjAxN1syXSwgaXJvX2dic180MDU5XzIwMThbMl0sDQogIGlyb19nYnNfNDA1OV8yMDE5WzJdLCBpcm9fZ2JzXzQwNTlfMjAyMFsyXSwNCiAgaXJvX2diczYwNzlbMl0sIGlyb19nYnNfNjA3OV8yMDE3WzJdLCBpcm9fZ2JzXzYwNzlfMjAxOFsyXSwNCiAgaXJvX2dic182MDc5XzIwMTlbMl0sIGlyb19nYnNfNjA3OV8yMDIwWzJdDQogICkpDQpgYGANCg0KDQpgYGB7cn0NCklSXzEwMDBQWV85NUggPC0gYXMubnVtZXJpYyhjKA0KICBpcm9fYW5hcGhOWzNdLCBpcm9fYW5hcGhOXzIwMTdbM10sIGlyb19hbmFwaE5fMjAxOFszXSwgDQogIGlyb19hbmFwaE5fMjAxOVszXSwgaXJvX2FuYXBoTl8yMDIwWzNdLCANCiAgaXJvX2FuYXBoTjAwMTlbM10sIGlyb19hbmFwaE5fMDAxOV8yMDE3WzNdLCBpcm9fYW5hcGhOXzAwMTlfMjAxOFszXSwNCiAgaXJvX2FuYXBoTl8wMDE5XzIwMTlbM10sIGlyb19hbmFwaE5fMDAxOV8yMDIwWzNdLCANCiAgaXJvX2FuYXBoTjIwMzlbM10sIGlyb19hbmFwaE5fMjAzOV8yMDE3WzNdLCBpcm9fYW5hcGhOXzIwMzlfMjAxOFszXSwNCiAgaXJvX2FuYXBoTl8yMDM5XzIwMTlbM10sIGlyb19hbmFwaE5fMjAzOV8yMDIwWzNdLA0KICBpcm9fYW5hcGhONDA1OVszXSwgaXJvX2FuYXBoTl80MDU5XzIwMTdbM10sIGlyb19hbmFwaE5fNDA1OV8yMDE4WzNdLA0KICBpcm9fYW5hcGhOXzQwNTlfMjAxOVszXSwgaXJvX2FuYXBoTl80MDU5XzIwMjBbM10sDQogIGlyb19hbmFwaE42MDc5WzNdLCBpcm9fYW5hcGhOXzYwNzlfMjAxN1szXSwgaXJvX2FuYXBoTl82MDc5XzIwMThbM10sDQogIGlyb19hbmFwaE5fNjA3OV8yMDE5WzNdLCBpcm9fYW5hcGhOXzYwNzlfMjAyMFszXSwNCiAgIyMjIyBBbmFwaCBQb3NzaWJsZSANCiAgaXJvX2FuYXBoUFszXSwgaXJvX2FuYXBoUF8yMDE3WzNdLCBpcm9fYW5hcGhQXzIwMThbM10sIA0KICBpcm9fYW5hcGhQXzIwMTlbM10sIGlyb19hbmFwaFBfMjAyMFszXSwgDQogIGlyb19hbmFwaFAwMDE5WzNdLCBpcm9fYW5hcGhQXzAwMTlfMjAxN1szXSwgaXJvX2FuYXBoUF8wMDE5XzIwMThbM10sDQogIGlyb19hbmFwaFBfMDAxOV8yMDE5WzNdLCBpcm9fYW5hcGhQXzAwMTlfMjAyMFszXSwgDQogIGlyb19hbmFwaFAyMDM5WzNdLCBpcm9fYW5hcGhQXzIwMzlfMjAxN1szXSwgaXJvX2FuYXBoUF8yMDM5XzIwMThbM10sDQogIGlyb19hbmFwaFBfMjAzOV8yMDE5WzNdLCBpcm9fYW5hcGhQXzIwMzlfMjAyMFszXSwNCiAgaXJvX2FuYXBoUDQwNTlbM10sIGlyb19hbmFwaFBfNDA1OV8yMDE3WzNdLCBpcm9fYW5hcGhQXzQwNTlfMjAxOFszXSwNCiAgaXJvX2FuYXBoUF80MDU5XzIwMTlbM10sIGlyb19hbmFwaFBfNDA1OV8yMDIwWzNdLA0KICBpcm9fYW5hcGhQNjA3OVszXSwgaXJvX2FuYXBoUF82MDc5XzIwMTdbM10sIGlyb19hbmFwaFBfNjA3OV8yMDE4WzNdLA0KICBpcm9fYW5hcGhQXzYwNzlfMjAxOVszXSwgaXJvX2FuYXBoUF82MDc5XzIwMjBbM10sDQogICMjIyMgR0JTIA0KICAgIGlyb19nYnNbM10sIGlyb19nYnNfMjAxN1szXSwgaXJvX2dic18yMDE4WzNdLCANCiAgaXJvX2dic18yMDE5WzNdLCBpcm9fZ2JzXzIwMjBbM10sIA0KICBpcm9fZ2JzMDAxOVszXSwgaXJvX2dic18wMDE5XzIwMTdbM10sIGlyb19nYnNfMDAxOV8yMDE4WzNdLA0KICBpcm9fZ2JzXzAwMTlfMjAxOVszXSwgaXJvX2dic18wMDE5XzIwMjBbM10sIA0KICBpcm9fZ2JzMjAzOVszXSwgaXJvX2dic18yMDM5XzIwMTdbM10sIGlyb19nYnNfMjAzOV8yMDE4WzNdLA0KICBpcm9fZ2JzXzIwMzlfMjAxOVszXSwgaXJvX2dic18yMDM5XzIwMjBbM10sDQogIGlyb19nYnM0MDU5WzNdLCBpcm9fZ2JzXzQwNTlfMjAxN1szXSwgaXJvX2dic180MDU5XzIwMThbM10sDQogIGlyb19nYnNfNDA1OV8yMDE5WzNdLCBpcm9fZ2JzXzQwNTlfMjAyMFszXSwNCiAgaXJvX2diczYwNzlbM10sIGlyb19nYnNfNjA3OV8yMDE3WzNdLCBpcm9fZ2JzXzYwNzlfMjAxOFszXSwNCiAgaXJvX2dic182MDc5XzIwMTlbM10sIGlyb19nYnNfNjA3OV8yMDIwWzNdDQogICkpDQpgYGANCg0KYGBge3J9DQpCaWdfdGFibGUgPC0gZGF0YS50YWJsZShEaWFnbm9zaXMgPSBhbGxfZGlhZywgDQogICAgICAgICAgICAgICAgICAgICAgICBBZ2VfQmFuZHMgPSBhbGxfYWdlcywNCiAgICAgICAgICAgICAgICAgICAgICAgIFllYXIgPSBhbGxfeWVhcnMsDQogICAgICAgICAgICAgICAgICAgICAgICBDb3VudCA9IGNvdW50X2V2ZW50cywNCiAgICAgICAgICAgICAgICAgICAgICAgIFBlcnNvbl9ZZWFycyA9IHJvdW5kKHBlcnNfeWVhcl9hbGwsIDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgSVJfMTAwMF9QWSA9IElSXzEwMDBQWSwgDQogICAgICAgICAgICAgICAgICAgICAgICBJUl8xMDAwX1BZXzk1TCA9IElSXzEwMDBQWV85NUwsDQogICAgICAgICAgICAgICAgICAgICAgICBJUl8xMDAwUFlfOTVIID0gSVJfMTAwMFBZXzk1SCkNCmBgYA0KDQpUaGUgZm9yZXN0IHBsb3QgZmlndXJlcyAoc2VlIEZpZ3VyZSBcQHJlZihmaWc6dCkpLCBzaG93IHRoZSBpbmNpZGVuY2UgcmF0ZXMuIEEgdG90YWwgb2YgYHIgVE5FX2FuYXBoTiArIFRORV9hbmFwaFAgKyBUTkVfZ2JzYCBldmVudHMgb2NjdXJyZWQuIE9mIHRoZXNlIGV2ZW50cyBgciBUTkVfYW5hcGhOYCB3ZXJlIGFuYXBoeWxheGlzIG5hcnJvdywgYHIgVE5FX2FuYXBoUGAgd2VyZSBhbmFwaHlsYXhpcyBwb3NzaWJsZSBhbmQgYHIgVE5FX2dic2Agd2VyZSBHQlMuIFdoZW4gc3RyYXRpZmllZCBpbiB0byBhZ2UgYmFuZHMsIHRoZSBwZXJzb24geWVhcnMgYmVjb21lIGxvd2VyIGFuZCB0aGVyZSBpcyBsb3cgY29uZmlkZW5jZS4gRXNwZWNpYWxseSBpbiB0aGUgaGlnaCBhbmQgbG93IGFnZSBiYW5kcy4gTW9zdCBldmVudHMgb2NjdXJyZWQgaW4gdGhlIGZpcnN0IHRocmVlIHllYXJzLiBJbiB0aGVzZSB5ZWFycyBlYWNoIHR5cGUgb2YgZXZlbnQgc3RhdHVzIGhhZCBhcm91bmQgMTUgdG8gMjAgb2NjdXJyZWQgZXZlbnRzLiBUaGUgbGFzdCB5ZWFyIG9mIHRoZSBzdHVkeSBoYXMgYWxtb3N0IG5vIGV2ZW50cyBhbmQgYW4gaW5zaWduaWZpY2FudCBpbmNpZGVuY2UgcmF0ZSBjb25maWRlbmNlIGludGVydmFsLg0KDQoNCiMjIyBGb3Jlc3QgUGxvdCBGaWd1cmVzIHstLnRhYnNldH0gDQoNCiMjIyMgVG90YWwgIHstI3RvdH0NCg0KDQpgYGB7ciB0LCBmaWcuY2FwPSdGb3Jlc3QgcGxvdHMgb2YgdG90YWwgSVInfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQoNCmRmIDwtIEJpZ190YWJsZSANCg0KDQoNCmRmX3RvdGFsIDwtIGRmICU+JSAgDQogIGZpbHRlcihZZWFyPT0nVG90YWwnKQ0KDQpkZl90b3RhbCR5X29yZGVyIDwtIGZhY3RvcihwYXN0ZShkZl90b3RhbCRBZ2VfQmFuZHMpLCBsZXZlbHMgPSB1bmlxdWUocGFzdGUoIGRmX3RvdGFsJEFnZV9CYW5kcykpLCBvcmRlcmVkID0gVFJVRSkNCiMgcGxvdCB0aGUgZm9yZXN0IHBsb3QNCmdncGxvdChkZl90b3RhbCwgYWVzKHggPSBJUl8xMDAwX1BZLCB5ID0geV9vcmRlciwgc2l6ZT1QZXJzb25fWWVhcnMpKSArDQogIGdlb21fcG9pbnQoc2hhcGU9MTUpICsNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBJUl8xMDAwX1BZXzk1TCwgeG1heCA9IElSXzEwMDBQWV85NUgpLCBzaXplID0gMC41KSArDQogIGZhY2V0X2dyaWQoRGlhZ25vc2lzIH4gLiwgc2NhbGVzID0gImZyZWVfeSIsIHNwYWNlID0gImZyZWVfeSIpICsNCiAgdGhlbWVfYncoKSArDQogIGxhYnModGl0bGUgPSAiRm9yZXN0IFBsb3Qgb2YgSW5jaWRlbmNlIFJhdGVzIiwNCiAgICAgICB4ID0gIkluY2lkZW5jZSBSYXRlIHBlciAxMDAwIFBlcnNvbi1ZZWFycyIsDQogICAgICAgeSA9ICJEaWFnbm9zaXMgYW5kIEFnZSBCYW5kIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJEYXRhIGZyb20gMjAxNyB0byAyMDIwIikrDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQ0KYGBgDQoNCiMjIyMgMjAxNyB7LSMyMDE3fQ0KDQoNCmBgYHtyIGssIGZpZy5jYXA9ICdmb3Jlc3QgcGxvdHMgZGF0YSBmcm9tIDIwMTcnfQ0KDQpkZl8yMDE3X1AgPC0gZGYgJT4lICANCiAgZmlsdGVyKFllYXI9PScyMDE3JykNCg0KZGZfMjAxN19QJHlfb3JkZXIgPC0gZmFjdG9yKHBhc3RlKGRmXzIwMTdfUCRBZ2VfQmFuZHMpLCBsZXZlbHMgPSB1bmlxdWUocGFzdGUoZGZfMjAxN19QJEFnZV9CYW5kcykpLCBvcmRlcmVkID0gVFJVRSkNCiMgcGxvdCB0aGUgZm9yZXN0IHBsb3QNCmdncGxvdChkZl8yMDE3X1AsIGFlcyh4ID0gSVJfMTAwMF9QWSwgeSA9IHlfb3JkZXIsIHNpemU9UGVyc29uX1llYXJzKSkgKw0KICBnZW9tX3BvaW50KHNoYXBlPTE1KSArDQogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gSVJfMTAwMF9QWV85NUwsIHhtYXggPSBJUl8xMDAwUFlfOTVIKSwgc2l6ZSA9IDAuNSkgKw0KICBmYWNldF9ncmlkKERpYWdub3NpcyB+IC4sIHNjYWxlcyA9ICJmcmVlX3kiLCBzcGFjZSA9ICJmcmVlX3kiKSArDQogIHRoZW1lX2J3KCkgKw0KICBsYWJzKHRpdGxlID0gIkZvcmVzdCBQbG90IG9mIEluY2lkZW5jZSBSYXRlcyIsDQogICAgICAgeCA9ICJJbmNpZGVuY2UgUmF0ZSBwZXIgMTAwMCBQZXJzb24tWWVhcnMiLA0KICAgICAgIHkgPSAiRGlhZ25vc2lzIGFuZCBBZ2UgQmFuZCIsDQogICAgICAgc3VidGl0bGUgPSAiRGF0YSBmcm9tIDIwMTciKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQ0KYGBgDQoNCg0KIyMjIyAyMDE4IHstIzIwMTh9DQoNCmBgYHtyIGksIGZpZy5jYXA9ICdGb3Jlc3QgUGxvdCBkYXRhIGZyb20gMjAxOCd9DQoNCmRmXzIwMThfUCA8LSBkZiAlPiUgIA0KICBmaWx0ZXIoWWVhcj09JzIwMTgnKQ0KDQpkZl8yMDE4X1AkeV9vcmRlciA8LSBmYWN0b3IocGFzdGUoZGZfMjAxOF9QJEFnZV9CYW5kcyksIGxldmVscyA9IHVuaXF1ZShwYXN0ZShkZl8yMDE4X1AkQWdlX0JhbmRzKSksIG9yZGVyZWQgPSBUUlVFKQ0KIyBwbG90IHRoZSBmb3Jlc3QgcGxvdA0KZ2dwbG90KGRmXzIwMThfUCwgYWVzKHggPSBJUl8xMDAwX1BZLCB5ID0geV9vcmRlciwgc2l6ZSA9IFBlcnNvbl9ZZWFycykpICsNCiAgZ2VvbV9wb2ludChzaGFwZT0xNSkgKw0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IElSXzEwMDBfUFlfOTVMLCB4bWF4ID0gSVJfMTAwMFBZXzk1SCksIHNpemUgPSAwLjUpICsNCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKw0KICB0aGVtZV9idygpICsNCiAgbGFicyh0aXRsZSA9ICJGb3Jlc3QgUGxvdCBvZiBJbmNpZGVuY2UgUmF0ZXMiLA0KICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwNCiAgICAgICB5ID0gIkRpYWdub3NpcyBhbmQgQWdlIEJhbmQiLA0KICAgICAgIHN1YnRpdGxlID0gIkRhdGEgZnJvbSAyMDE4IikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNTApLCBicmVha3MgPSBzZXEoMCwgMTYwLCBieSA9IDIwKSkgKw0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGltaXRzPWMoMCwyNTAwKSwgYnJlYWtzID0gc2VxKDAsMjUwMCwgYnk9NTAwKSkNCmBgYA0KDQogDQojIyMjIDIwMTkgey0jMjAxOX0NCg0KYGBge3IgbywgZmlnLmNhcD0gJ0ZvcmVzdCBQbG90IGRhdGEgZnJvbSAyMDE5J30NCg0KZGZfMjAxOV9QIDwtIGRmICU+JSAgDQogIGZpbHRlcihZZWFyPT0nMjAxOScpDQoNCmRmXzIwMTlfUCR5X29yZGVyIDwtIGZhY3RvcihwYXN0ZShkZl8yMDE5X1AkQWdlX0JhbmRzKSwgbGV2ZWxzID0gdW5pcXVlKHBhc3RlKGRmXzIwMTlfUCRBZ2VfQmFuZHMpKSwgb3JkZXJlZCA9IFRSVUUpDQojIHBsb3QgdGhlIGZvcmVzdCBwbG90DQpnZ3Bsb3QoZGZfMjAxOV9QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplPVBlcnNvbl9ZZWFycykpICsNCiAgZ2VvbV9wb2ludChzaGFwZT0xNSkgKw0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IElSXzEwMDBfUFlfOTVMLCB4bWF4ID0gSVJfMTAwMFBZXzk1SCksIHNpemUgPSAwLjUpICsNCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKw0KICB0aGVtZV9idygpICsNCiAgbGFicyh0aXRsZSA9ICJGb3Jlc3QgUGxvdCBvZiBJbmNpZGVuY2UgUmF0ZXMiLA0KICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwNCiAgICAgICB5ID0gIkRpYWdub3NpcyBhbmQgQWdlIEJhbmQiLA0KICAgICAgIHN1YnRpdGxlID0gIkRhdGEgZnJvbSAyMDE5IikrDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQ0KYGBgDQoNCiMjIyMgMjAyMCB7LSMyMDIwfQ0KDQpgYGB7ciA5OTksIGZpZy5jYXA9ICdGb3Jlc3QgcGxvdCBkYXRhIGZyb20gMjAyMCd9DQoNCmRmXzIwMjBfUCA8LSBkZiAlPiUgIA0KICBmaWx0ZXIoWWVhcj09JzIwMjAnKQ0KDQpkZl8yMDIwX1AkeV9vcmRlciA8LSBmYWN0b3IocGFzdGUoZGZfMjAyMF9QJEFnZV9CYW5kcyksIGxldmVscyA9IHVuaXF1ZShwYXN0ZShkZl8yMDIwX1AkQWdlX0JhbmRzKSksIG9yZGVyZWQgPSBUUlVFKQ0KIyBwbG90IHRoZSBmb3Jlc3QgcGxvdA0KZ2dwbG90KGRmXzIwMjBfUCwgYWVzKHggPSBJUl8xMDAwX1BZLCB5ID0geV9vcmRlciwgc2l6ZT1QZXJzb25fWWVhcnMpKSArDQogIGdlb21fcG9pbnQoc2hhcGU9MTUpICsNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBJUl8xMDAwX1BZXzk1TCwgeG1heCA9IElSXzEwMDBQWV85NUgpLCBzaXplID0gMC41KSArDQogIGZhY2V0X2dyaWQoRGlhZ25vc2lzIH4gLiwgc2NhbGVzID0gImZyZWVfeSIsIHNwYWNlID0gImZyZWVfeSIpICsNCiAgdGhlbWVfYncoKSArDQogIGxhYnModGl0bGUgPSAiRm9yZXN0IFBsb3Qgb2YgSW5jaWRlbmNlIFJhdGVzIiwNCiAgICAgICB4ID0gIkluY2lkZW5jZSBSYXRlIHBlciAxMDAwIFBlcnNvbi1ZZWFycyIsDQogICAgICAgeSA9ICJEaWFnbm9zaXMgYW5kIEFnZSBCYW5kIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJEYXRhIGZyb20gMjAyMCIpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNTApLCBicmVha3MgPSBzZXEoMCwgMTYwLCBieSA9IDIwKSkgKyANCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKGxpbWl0cz1jKDAsMjUwMCksIGJyZWFrcyA9IHNlcSgwLDI1MDAsIGJ5PTUwMCkpDQpgYGANCg0KDQoNCiMjIExlc3NvbnMgbGVhcm5lZCB7LSNsZXNzfQ0KDQpXZSBoYXZlIGxlYXJuZWQgdG8gdGFrZSBkYXRhIGZyb20gdmFyaW91cyB0YWJsZXMsIGFuZCBzdHJ1Y3R1cmUgaXQgdG8gYSBkYXRhc2V0IHdoaWNoIGNhbiBiZSBhbmFseXNlZC4gSW4gYWRkaXRpb24sIHdlIGhhdmUgbGVhcm5lZCB0aGF0IGEgbG90IG9mIGRhdGEgaXMgbmVlZGVkIHRvIG1ha2UgaW5mZXJlbmNlIGFib3V0IGluY2lkZW5jZSByYXRlcy4gVGhhdCBpcywgd2hlbiBkYXRhIG5lZWRzIHRvIGJlIHN0cmF0aWZpZWQsIHRoZSBjb25maWRlbmNlIHdpbGwgZ2V0IGxvd2VyIHdoZW4gdGhlcmUgYXJlIG5vdCBlbm91Z2ggcGVyc29uIHllYXJzLiBIZW5jZSwgQ29tbW9uIERhdGEgTW9kZWxzIGFyZSB1c2VkLCB0byBpbXByb3ZlIHRoZSBkYXRhIHF1YWxpdHkuIA0KDQojIEFubmV4ZXMgIHstLnRhYnNldH0NCg0KIyMgQW5uZXggMSBSZXN1bHRzIFRhYmxlIHstI1RhYmxlc30NCg0KYGBge3IgdGFiMiwgcmVzdWx0cyA9ICdob2xkJ30NCmRhdGF0YWJsZShCaWdfdGFibGUsIA0KICAgICAgICAgIGNhcHRpb249J0luY2lkZW5jZSBSYXRlcyB3aXRoIDk1JSBDSScsDQogICAgICAgICAgY2xhc3M9J2NlbGwtYm9yZGVyIHN0cmlwZScsIA0KICAgICAgICAgIHJvd25hbWVzPUYsIA0KICAgICAgICAgIGNvbG5hbWVzPWMoJ0RpYWdub3NpcycsICdBZ2UgQmFuZHMnLCAnWWVhcicsICdBbW91bnQgb2YgRXZlbnRzJywgDQogICAgICAgICAgICAgICAgICAgICAnUGVyc29uIFllYXJzJywgJ0lSIDEwMDAgUGVyc29uIFllYXJzJywgJ0lSIDEwMDAgUGVyc29uIFllYXJzICA5NSUgQ0kgTG93ZXInLCAnSVIgMTAwMCBQZXJzb24gWWVhcnMgOTUlIENJIEhpZ2hlcicpLA0KICAgICAgICAgIGV4dGVuc2lvbnM9J0J1dHRvbnMnLA0KICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KGRvbSA9ICdCZnJ0aXAnLCBidXR0b25zID0gYygnY29weScsICdjc3YnLCAnZXhjZWwnLCAncGRmJywgJ3ByaW50JykNCiAgICAgICAgICApKQ0KYGBgDQoNCg0KDQoNCiMjIEFubmV4IDIgRGF5IDYgey0jZGF5Nn0NCg0KYGBge3IgZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGg9JzEwMCUnLG91dC5oZWlnaHQ9IDUwMDAscmVzdWx0cz0nYXNpcyd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiZGF5Ni5wZGYiKQ0KYGBgDQoNCg0KDQo=